我正在努力创建一个循环,以便从导入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中的正常绘图函数)来从循环中绘制一个变量,但我似乎无法做到。
非常感谢任何有关尝试的建议!
答案 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)
})