2017-03-20 4 views
0

ggplotで線を描くのが難しいです。私はhereで議論された問題を朗読しています。解決策は、私がgplotの美学に導入されたもう1つの要素を持っているときには機能しません。ここにコードがあります。プロット内にグループ化されたデータとは関係なく、ggplotの線を描画する

pp <- ggplot(mtcars, aes(factor(cyl), mpg, colour = factor(cyl))) + geom_boxplot() 
df1 <- data.frame(a = c(1, 1:3,3), b = c(39, 40, 40, 40, 39)) 
df2 <- data.frame(a = c(1, 1,2, 2), b = c(35, 36, 36, 35)) 
df3 <- data.frame(a = c(2, 2, 3, 3), b = c(24, 25, 25, 24)) 
pp + geom_line(data = df1, aes(x = a, y = b)) + annotate("text", x = 2, y = 42, label = "*", size = 8) + 
geom_line(data = df2, aes(x = a, y = b)) + annotate("text", x = 1.5, y = 38, label = "**", size = 8) + 
geom_line(data = df3, aes(x = a, y = b)) + annotate("text", x = 2.5, y = 27, label = "n.s.", size = 8) 

これにより、エラーError in factor(cyl) : object 'cyl' not foundが生成されます。私はここで最高のデータを記述していないことを知っていますが、問題がはっきりしていることを願っています。私は、ggplot上に単色の線を描き、プロット内のグループ化に関係なく、その上に有意値を書きたいと思います。

答えて

1

ggplot2がデータにcylの列を持たない行にcolour = factor(cyl)を適用しようとしているため、エラーが発生します。これは、その美学をgeom_boxplot()層内に移動することで解決できます。

pp <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot(aes(colour = factor(cyl))) 
+0

魅力的なように働いています。ありがとう、@David、しかし、私はggplotが単純なものの複雑な実装のように見えることを懸念しています。行を追加するだけで、私はこの微妙な変更を行わなければなりませんでした。その上で、この構文を 'stats_boxplot'に複製する必要がありました。私が 'position_dodge'のために取ったのと同じ手順です。 –

+0

@satyanarayanrao ggplot2は、カスタムアノテーションではなく、データの視覚化を念頭に設計されています。データを視覚化すると、各レイヤーによって美学が継承されるのに役立ちます。いずれにしても、ggplot2を使用すると、データの変数が結果のレイヤにどのようにマップされるのかを習得することが重要です –

関連する問題