Ggplotを使用して複数の列をループし、複数のプロットを作成したいのですが、forループでプレースホルダーを使用すると、ggplotの動作が変わります。
私がこれを持っている場合:
t <- data.frame(w = c(1, 2, 3, 4), x = c(23,45,23, 34),
y = c(23,34,54, 23), z = c(23,12,54, 32))
これは正常に機能します。
ggplot(data=t, aes(w, x)) + geom_line()
しかし、これはしません:
i <- 'x'
ggplot(data=t, aes(w, i)) + geom_line()
最終的にx、y、zをループしたい場合、これは問題です。何か助けはありますか?
次のように、aes
の代わりにaes_string
を使用する必要があります。
ggplot(data=t, aes_string(x = "w", y = i)) + geom_line()
その場合、w
も文字列として指定する必要があることに注意してください。
問題は、データフレームt
にアクセスする方法です。ご存知かもしれませんが、これを行うにはいくつかの方法がありますが、残念ながら、文字を使用することはggplot
のそれらの1つではないことは明らかです。
うまくいく1つの方法は、例の列の数値位置を使用することです。たとえば、i <- 2
を試すことができます。ただし、これが機能する場合は、私が使用したことのないggplotに基づいています(ただし、Hadleyによる他の作業は知っているので、機能するはずです)
これを回避する別の方法は、ggplotを呼び出すたびに新しい一時データフレームを作成することです。例えば。:
tmp <- data.frame(a = t[['w']], b = t[[i]])
ggplot(data=tmp, aes(a, b)) + geom_line()
何をしようとしているのかに応じて、facet_wrap
またはfacet_grid
は、同じ基本構造で複数のプロットを作成するのに適しています。このような何かがあなたを正しい球場に連れて行くはずです:
t.m = melt(t, id="w")
ggplot(t.m, aes(w, value)) + facet_wrap(~ variable) + geom_line()