データフレームごとに異なるグラフィックフレーム内の別のデータフレームのラインをプロットする必要があります。ほとんど同じコードとエース(color = "hard-coded-name")を使用して伝説を得ることができますが、私は事前に名前を知りません。私は、データフレームを単一のデータフレームにバインドするのに十分なRAMがありません。私は色付きの線でプロットを生成するサンプルを書いた。凡例を追加するにはどうすればいいですか?サンプルの場合と同様に、リスト内のデータフレーム数(ldf)やその名前について事前に知る必要はありません。入力データがリストデータフレームの場合、ggplotに紛失凡例を追加します。
library('ggplot2')
f30 <- function() {
###############################################################
##### Create a list with a random number of data frames #######
##### The names of the list elements are "random" #######
###############################################################
f1 <- function(i) {
b <- sample(1:10, sample(8:10, 1))
a <- sample(1:100, length(b))
data.frame(Before = b, After = a)
}
ldf <- sapply(1:sample(2:8,1), f1, simplify = FALSE)
names(ldf) <- LETTERS[sample(1:length(LETTERS), length(ldf))]
palette <- c(
"#000000", "#E69F00", "#56B4E9", "#009E73",
"#F0E442", "#0072B2", "#D55E00", "#CC79A7"
)
###############################################################
##### Above this point we're just creating a sample ldf #######
###############################################################
ePlot <- new.env(parent = emptyenv())
fColorsButNoLegend <- function(ix) {
df <- ldf[[ix]]
n <- names(ldf)[ix]
if (ix == 1) {
ePlot$p <- ggplot(df, aes(x = Before, y = After)) +
geom_line(colour = palette[ix])
} else {
ePlot$p <- ePlot$p +
geom_line(
colour = palette[ix],
aes(x = Before, y = After),
df
)
}
}
sapply(1:length(ldf), fColorsButNoLegend)
#Add the title and display the plot
a <- paste(names(ldf), collapse = ', ')
ePlot$p <- ePlot$p +
ggtitle(paste("Before and After:", a))
ePlot$p
}
lineplotは巨大data.framesを必要としません。あなたのdata.framesが大きすぎて結合することができない場合、それらはプロットに必要なものよりも大きくなります。サブサンプルを使用し、これらを結合する。 – Roland
それは良い点です。実際には、これはメモリが制限されているため、不要なプレッシャーを加えたくない大きなアプリの一部に過ぎません。私はggplotの新機能です。私がラインプロットを使用する一般的なサブルーチンを書く場合は、サイズをチェックしサブサンプルを使用するコードを追加するのがよいでしょうか?どのような数のx点でサブサンプリングを開始したいのですか? –
これはデータの性質によって異なります。スムーズなデータがあれば、より小さなサブサンプルを使用できます。ピークが多い非常に動的なデータがある場合は、より大きなサブサンプルが必要になることがあります。 – Roland