在循环中创建ggplots

时间:2015-10-27 16:29:05

标签: r ggplot2

我正在努力创建一个循环,以便从导入R的文件中的变量中加载不同的图。

dummydata.csv中的一些数据:

Time,A1,A2,A3,A4
1,0.1,0.2,0.1,0.1
2,0.2,0.2,0.2,0.3
3,0.4,0.5,0.3,0.4
4,0.6,0.8,0.4,0.6
5,0.8,0.9,0.6,0.7

基本上真实的数据会比这个文件大得多,而且我有兴趣在不同的情节中将“时间”映射到彼此的变量,并且认为尝试循环它会比单独写作更加明智每个情节!

我试图做的事情:

library("ggplot2")

dummydata <- read.csv("dummydata.csv", header = T)

columns <- colnames(dummydata[2:5])

for(i in columns){
  title <- paste("graph_", i, ".pdf")
  pdf(title)
  ggplot(data = dummydata, aes(x=Time, y=i)) + geom_point()}
dev.off()

显然这不起作用。我做了一些不同的尝试来获取ggplot(或者只是R中的正常绘图函数)来从循环中绘制一个变量,但我似乎无法做到。

非常感谢任何有关尝试的建议!

2 个答案:

答案 0 :(得分:0)

您可以这样做(这是默认的HttpResponse功能):

plot

如果您想使用 for (i in 1:(dim(dummydata)[2]-1)){ title<-paste0("graph_", i, ".pdf") # use paste0 to remove blanks pdf(title) plot(x=df[,1],y=df[,i],pch=20,type='l') # add options such as axis titles, color, ... dev.off()}

ggplot()

答案 1 :(得分:0)

以下是使用不同方法的答案。我将数据转换为长格式然后使用split来生成所有绘图(包括pdf和内存)

#reshape data first

library(reshape2)

m_dummydata <- melt(dummydata,id.var="Time")
    head(m_dummydata)
# Time variable value
# 1    1       A1   0.1
# 2    2       A1   0.2
# 3    3       A1   0.4
# 4    4       A1   0.6
# 5    5       A1   0.8
# 6    1       A2   0.2

plots <- lapply(split(m_dummydata,m_dummydata$variable),function(x){
  mytitle=sprintf("graph_%s.pdf",unique(x$variable))
  myplot = ggplot(x, aes(x=Time,y=value)) +geom_point()+labs(title=mytitle)
  pdf(mytitle)
  print(myplot)
  dev.off()
  return(myplot)


})