2011-09-19 12 views
30

私は3つのデータセットを同じグラフにプロットしようとしています。 1つのデータセットはグラフ上に未接続ポイントのセットとして表示され、他の2つは接続データポイントとして表示されます。 Iは、以下の次のコードを使用してグラフを構築することができ:ggplot2の同じグラフにある複数のデータセットのgeom_point()とgeom_line()

x <- c(1,2,3,4) 
y <- c(1.1,1.2,1.3,1.4) 
y2 <- c(2.1,2.2,2.3,2.4) 
x3 <- c(4,5,6,7) 
y3 <- c(3.1,3.2,3.3,3.2) 
p1 <- data.frame(x=x,y=y) 
p2 <- data.frame(x=x,y=y2) 
p3 <- data.frame(x=x3,y=y3) 

plot(x,y,type="o", col="red") 
points(x3,y3,col="darkgreen",pch=16) 
points(x,y2,type="o",col="blue") 

コードに示すように、型でプロットされている点の2セットがある「○」、点を線で接続されていることを意味し、 1つの点の集合が線で結ばれていない点である。私はggplot2でこれを再現しようとしていました。 私はggplot2で次の操作を行います。

zz <- melt(list(p1=p1,p2=p2,p3=p3), id.vars="x") 
ggplot(zz, aes(x.value, color = L1)) 
+ geom_point() + scale_color_manual("Dataset", 
values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 

上記をやって、私はまだ、もちろん赤と青の点がそれぞれ接続されていない、3つの異なる色の点の3セットを取得します。 私は、次のしているように、私は上記のコマンドにgeom_lineを()を追加することができますポイントを接続する場合:これはすべての点を結ぶ線になりもちろん

ggplot(zz, aes(x.value, color = L1)) + geom_point() + 
scale_color_manual("Dataset", values = 
c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) + geom_line() 

、すべての赤の点が接続されるように全ての青色点は互いに接続され、全ての緑色点は互いに接続されている。しかし、私は赤と青の点を接続したいが、私は緑の点を接続したくない。これを行う方法はありますか?私は、次の(またはそれに類似)を行うことができます

:赤いドットが接続されているこのコマンドで

ggplot(p2, aes(x,y)) + geom_point(color = "blue") + geom_line(color="blue") 
+ geom_point(data=p3, color = "red") + 
geom_line(data=p3, color="red") + geom_point(data=p1, color = "darkgreen") 

、青が接続されており、緑が切断されています。しかし、すべてのポイントカラーを凡例に表示させたい(このソリューションでは凡例が表示されないようにする)ために、これをしたくありません。

+1

私はそれらを実行しようとしたときに見つけたサンプルスクリプトに小さなエラーがあります。 'aes(x.value、color = L1)'は 'aes(x、value、color = L1)'でなければなりません。 – pedromanoel

+0

ありがとう、あなたの質問も私を助けた。 –

答えて

35

各層が独自のデータセットを持つことができます。だから、geom_lineに提供されるデータからL1=="p1"を除外するために、データをサブセットする必要があります。

ggplot(zz, aes(x, y=value, color=L1)) + 
    geom_point() + 
    geom_line(data=zz[zz$L1!="p1", ]) + 
    scale_color_manual("Dataset", 
     values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 

enter image description here

9

あなたはそれぞれのgeomに異なるデータセットを供給することができます。したがって、p1を除くデータセットをgeom_lineレイヤに渡すことができます。このようなものはうまくいくはずです:

ggplot(zz, aes(x, value, color = L1)) + 
    geom_point() + 
    geom_line(data = subset(zz, L1 %in% c("p2", "p3")), aes(group = L1)) + 
    scale_color_manual("Dataset", values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 
関連する問題