次のコードを使用して生成したデータフレームがあります。
x <- c(1:10)
y <- x^3
z <- y-20
s <- z/3
t <- s*6
q <- s*y
x1 <- cbind(x,y,z,s,t,q)
x1 <- data.frame(x1)
したがって、データフレームx1には次のデータがあります。
x y z s t q
1 1 1 -19 -6.333333 -38 -6.333333
2 2 8 -12 -4.000000 -24 -32.000000
3 3 27 7 2.333333 14 63.000000
4 4 64 44 14.666667 88 938.666667
5 5 125 105 35.000000 210 4375.000000
6 6 216 196 65.333333 392 14112.000000
7 7 343 323 107.666667 646 36929.666667
8 8 512 492 164.000000 984 83968.000000
9 9 729 709 236.333333 1418 172287.000000
10 10 1000 980 326.666667 1960 326666.666667
ここで、列xとy、zとs、およびtとqを同じプロットにプロットしたいので、このために次のコードを使用します。
p <- ggplot() +
geom_line(data = x1, aes(x = x1[,1], y = x1[,2], color = "red")) +
geom_line(data = x1, aes(x = x1[,3], y = x1[,4], color = "blue")) +
geom_line(data = x1, aes(x = x1[,5], y = x1[,6], color = "green")) +
xlab('x') +
ylab('y')
上記のコードは6列のデータフレームでは正常に機能しますが、列数の多いデータフレームでも同じ操作を実行したいと思います。たとえば、データフレームに20列ある場合、列19対20まで、列1対2、列3対4、列5対6などのプロットを含む単一のプロットが生成されるはずです。これを行うには、この次のコードは、
p <- ggplot() + geom_line(data = x1, aes(x = x1[,1], y = x1[,2], color = "red")) + xlab('x') + ylab('y')
ctr <- 1
for (iz in seq(3, ncol(x1), by = 2))
{
p$ctr <- p + geom_line(data = x1, aes(x = x1[,iz], y = x1[,iz+1], color = "green"))
ctr <- ctr+1
}
したがって、プロットは段階的に階層化され、最後のオブジェクトにはプロット全体が含まれている必要があります。上記のコードを使用すると、ループが実行されるたびにプロットが上書きされ、完全なデータをキャプチャする方法を指摘できる人がいるかもしれません。各プロットの凡例も表示したいと思います。
ありがとう
データを正しい形式にすれば、ループは必要ありません。元のデータフレームに基づいて長いデータフレームを作成できます。
x1_long <- data.frame(x = unlist(x1[c(TRUE, FALSE)]),
y = unlist(x1[c(FALSE, TRUE)]),
ind = gl(ncol(x1) / 2, nrow(x1)))
これで、1つのgeom_line
コマンドで十分です。
library(ggplot2)
ggplot(x1_long) +
geom_line(aes(x = x, y = y, colour = ind))
(注。赤い線もプロットされていますが、その値は非常に小さいです。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加