2016-02-22 3 views
1

Я пытаюсь построить 30 гистограмм из кадра данныхggplot2 несколько участков сохраняют старые участки

'data.frame': 569 obs. of 32 variables: 
$ ID  : int 842302 842517 84300903 84348301 84358402 843786 844359  84458202 844981 84501001 ... 
$ Diag  : Factor w/ 2 levels "B","M": 2 2 2 2 2 2 2 2 2 2 ... 
$ Radius : num 5.1 5.84 5.59 3.24 5.76 ... 
$ Text  : num 2.41 4.13 4.94 4.74 3.33 ... 
etc.... 

Я хочу, чтобы сгруппировать все атрибуты по Diag (клеветать или доброкачественным рак) и сохранить их в файл, как умножитель (30 отдельных гистограмм) вместе.

Но, когда я делаю это по-своему (итерация по столбцам), ggplot, похоже, как-то сохраняет старые данные, и он не изменяется в соответствии с текущим столбцом, если только я не делаю это вручную.

Это мой графический цикл, который пытается сохранить каждый участок в списке:

graph_att<-function(to=10){ 
    plots<-vector("list",to) 
for (i in 1:to){ 
    dev.next() 
    ind<-i+2 
    a<-t[1,i] #data.frame with vertical lines I want in the histograms 

    g<-ggplot(dataNorm[,c(2,ind)], aes(dataNorm[,ind]))+geom_histogram(aes(fill=Diag), 
    position="identity", colour="#999999", alpha=0.8, binwidth = 0.25)+ 
    geom_vline(xintercept = a) + 
    scale_fill_manual(values = c("#0072B2", "#E69F00")) 

plots[[i]]<-g 
rm(g) #trying to make sure its a new plot 
} 

return(plots) 
} 

И я использую функцию Multiplot из http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/ построить вместе. Но я получаю этот вывод, он только меняет вертикальную линию и сохраняет только одну гистограмму.

У меня также возникла идея создать еще один data.frame, и в каждом столбце укажите $ Diag и другие переменные, но не знаю, как их перебирать. Потому что я думал, что ggplot не имеет доступа к столбцам, которые я хочу.

Спасибо за любую помощь.

PS: Это то, что я получаю

my output

+0

'АЕС (DataNorm [, Ind])' не может работать из-за нестандартной оценки. Возможно, попробуйте 'aes_string (имена (dataNorm) [ind])'. Могут быть и другие проблемы. Предоставьте воспроизводимый пример, если вам нужна дополнительная помощь. – Roland

+0

Огромное спасибо, Роланд, это блестяще! Он отлично работает, также он сохраняет xlabel как имя переменной, что является фантастическим! Большое спасибо. Вы хотите опубликовать его как правильный ответ, чтобы я мог нажать на него, чтобы ответить? –

ответ

1

aes делает нестандартную оценку. Он ожидает, что имя столбца (без кавычек) файла data.frame передается аргументу data. Вы можете использовать aes_string передать имя столбца в виде строки символов:

aes_string(names(dataNorm)[ind]) 
Смежные вопросы