2016-07-11 9 views
2

データフレームがたくさんあり、同じggplotに各データフレームの2つの列をプロットする必要があります。私は既に青と赤で色付けされた別の関数からのプロットを持っています。新しいものを追加したいのです。私が試している方法はコンソール上で動作しますが、関数を保存して呼び出すことはできません。私が手にエラーがある:だから関数内でforループを使用して同じggplotにデータフレームをプロットする

Discrete value supplied to continuous scale. 

、データフレームは、私の環境であり、BEFMORN9にBEFMORN1を命名しました。最初のプロットはtest_plotです。

私にtest_plotが動作する最初の部分です。

test_plot<-ggplot()+geom_point(data=yy4, aes(x=Time, y=Dist), colour="red")+geom_point(data=zz4, aes(x=Time, y=Dist), colour="blue") 
test_plot<-test_plot+scale_x_continuous(name="Time (Seconds from the beginning)") 
test_plot<-test_plot+scale_y_continuous(name="Distance (Metres from the beginning)") 

第二の部分は

plot_all_runs<-function(r,test_plot) { 
for (i in 1:(length(r[[1]]))) { 
z<-as.data.frame(mget(ls(pattern=paste0("BEFMORN",i)))) 
test_plot2<-test_plot+geom_point(data=z, aes_string(x=names(z)[12], y=names(z)[17])) 
}print(test_plot2) 
} 

R新しい関数となるBEFMORNはRから来たように[1] []、異なるデータフレームの6つのリストのリストです。 BEFNOONはr [[2]]などから来るでしょう。私の計画はpaste0の引数が異なる6つの同じ関数を持つことです。

私はaes_string(x=names(z)[12]を使用しています。データフレームzは、各繰り返しで異なる列名を持つためです。

誰かがエラーが発生する理由を理解していますか?私はスケールを使って遊んだことがあります(最初のプロットから削除したり、次のプロットで再び追加します)が、改善はありません。

EDIT: プロットされるすべての列が数値に変換されました。その他は因子と整数です。

BEFMORN1<-data.frame(BEFMORN1.Time=seq(0:10, 0.5), BEFMORN1.Dist=1:20) 
BEFMORN2<-data.frame(BEFMORN2.Time=seq(0:13, 0.5), BEFMORN2.Dist=c(1:8,8,8,9,10,13,13,13,13.5,14,14,14 14:20)) 
yy4<-data.frame(Time=seq(0:10, 0.5). Dist=c(1:8,8,8,9,10,13,14:20)) 
ZZ4<-data.frame(Time=seq(0:12, 0.5). Dist=c(1:8,8,8,9,9.5,10,10.5,12,12.5,13,14:20)) 

test_plot<-ggplot()+geom_point(data=yy4, aes(x=Time, y=Dist), colour="red")+geom_point(data=zz4, aes(x=Time, y=Dist), colour="blue") 

plot_all_runs<-function(test_plot) { 
for (i in 1:9) { 
z<-as.data.frame(mget(ls(pattern=paste0("BEFMORN",i)))) 
test_plot2<-test_plot+geom_point(data=z, aes_string(x=names(z)[12], y=names(z)[17])) 
}print(test_plot2) 
} 
+1

エラーの理由は通常、データが長い形式ではなくワイドにあり、ggplotがそれらを別個の変数として誤って解釈するためです。それ以外は、再現可能な例がなければ助けがかなり難しいです(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 1つのプロットに複数の曲線を追加するか、複数のプロットを出力しますか? – biomiha

+0

複数の曲線を1つのプロットに変換する – Nikos

+2

その場合、データフレームを1つにマージします(ループを必要としません - 多くのオプションがあります)、曲線を定義する変数によってデータを長いフォーマットと色に変換します。 – biomiha

答えて

1

長い形式の@biomihaと@joranを生成する例が示唆:

library(ggplot2) 

BEFMORN1<-data.frame(Time=seq(0,10, 0.5) 
        , Dist=1:21, Group = "BEFMORN1") 
BEFMORN2<-data.frame(Time=seq(0,13, 0.5) 
        , Dist=c(1:8,8,8,9,10,13,13,13,13.5,14,14,14,14:21) 
        , Group = "BEFMORN2") 
yy4<-data.frame(Time=seq(0,10, 0.5) 
       , Dist=c(1:8,8,8,9,10,13,14:21) 
       , Group = "yy4") 
zz4<-data.frame(Time=seq(0,12, 0.5) 
       , Dist=c(1:8,8,8,9,9.5,10,10.5,12,12.5,13,14:21) 
       , Group = "zz4") 


allData <- 
    rbind(BEFMORN1, BEFMORN2, yy4, zz4) 


ggplot(allData 
     , aes(x = Time 
      , y = Dist 
      , col = Group)) + 
    geom_point() 

注意をあなたのデータは "グループ" を追加し、すでに配置されている場合に列をもっと注意して行う必要があります。しかし、一般的な原則は同じです。必要に応じてscale_color_*関数のいずれかを使用して、scale_color_manualなどのデフォルトの色を変更することができます。

+0

これはうまくいきました。リストのすべてのリストのすべてのデータフレームに対して新しい変数を自動的に作成するためには、すべてのサブセット(すべてのデータフレームのリストが6つあります)と2つのfor-loopsで注意が必要でした。すべてのお手伝いをありがとう! (私の例は複雑すぎてこのスレッドでは有益ではないので、アップロードしません。誰かが見たいと思えば説明します) – Nikos

関連する問題