所以我有一个数据帧tmp,每列都遵循不同的分布。我想要做的是在pdf中绘制直方图,每页都是直方图。但为什么我得到相同直方图的三倍?
当我输入g11时,我得到直方图g13,但是当我在pdf中绘制直方图时,而不是3个相同的页面(直方图1-3),我得到3个不同的页面,其上有相同的直方图。
可能是ggplot使用指针,并且由于第二个for循环,它会绘制g1i?
有没有办法重写我的代码? (这个例子简化了我的问题)
tmp <- data.frame(x=rnorm(n=20, mean=0, sd=1),
y=rnorm(n=20, mean=10, sd=2),
z=rnorm(n=20, mean=40, sd=5))
for (i in 1:3){
assign(paste("g1", i, sep=""),ggplot(tmp,aes(x=get(colnames(tmp)[i]))) + geom_histogram(binwidth=1))
}
pdf("/pathto/plot.pdf")
for(i in 1:3){
#i <- 1
grid.arrange(get(paste("g1", 1, sep="")), get(paste("g1", 2, sep="")), get(paste("g1", 3, sep="")))
}
dev.off()
答案 0 :(得分:2)
我认为第一个for循环中的get
没有正确更改列。
你可以试试这个:
for (i in 1:3){
assign(paste("g1", i, sep=""),ggplot(tmp,aes_string(x=colnames(tmp)[i])) + geom_histogram(binwidth=1))
}
答案 1 :(得分:2)
我会像下面的代码一样重写它。 首先,我将数据从宽格式转换为长格式,然后对每个级别(x,y,z)进行子集化并绘制它。
library(ggplot2)
library(tidyr)
tmp <- data.frame(x=rnorm(n=20, mean=0, sd=1),
y=rnorm(n=20, mean=10, sd=2),
z=rnorm(n=20, mean=40, sd=5))
xy <- gather(tmp)
pdf("histogram.pdf")
for (i in unique(xy$key)) {
x <- droplevels(xy[xy$key == i, ])
print(
ggplot(x, aes(x = value)) +
theme_bw() +
geom_histogram()
)
}
dev.off()