2015-10-27 2 views
2

Я изо всех сил, чтобы создать цикл, чтобы сделать загрузку различных участков из переменных в файле импортируемого в R.Создание ggplots в цикле

Некоторые данные в 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

Нет никаких слоев на ваших участках, вы хотите очки или еще что-то? – jenesaisquoi

+1

, но просто убедитесь, что вы «распечатываете» любой граф, который хотите, 'print (ggplot (dat, aes_string (« Time », i)) + geom_point())' – jenesaisquoi

+0

ah yep, забыли + geom_point() в моем примере, спасибо – Tom

ответ

0

Вы можете сделать это (это по умолчанию 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():

for (i in 1:(dim(dummydata)[2]-1)){ 
    title<-paste0("graph_", i, ".pdf") 
    pdf(title) 
    print(ggplot(data = dummydata, aes(x=Time, y=dummydata[,i+1]))+geom_point()) 
    dev.off()} 
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) 


}) 
Смежные вопросы