ループを使用してRのggplot2を使用し、同じプロット内の同じデータフレームから複数のxyプロットを生成し、対応する凡例を表示します

Adm

次のコードを使用して生成したデータフレームがあります。

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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ