2013-06-17 3 views
17

Пытается использовать ggplot для построения нескольких строк в один граф, но не уверен, как это сделать с моим набором данных. Не уверен, нужно ли мне изменить структуру данных или нет (транспонирование?)Участок нескольких строк в одном графике

данных выглядят следующим образом:

Company 2011 2013 
Company1 300 350 
Company2 320 430 
Company3 310 420 

Я также попытался это транспонированным:

Year Company1 Company2 Company3 
2011 300  320  310 
2013 350  430  420 

А для этого я могу построить 1 значений с использованием;

ggplot(data=df, aes(x=Year, y=Company1)) + geom_line(colour="red") + geom_point(colour="red", size=4, shape=21, fill="white") 

Но я не знаю, как объединить все компании, так как у меня нет объекта «Компания», чтобы больше группироваться. Какие-либо предложения?

ответ

44

Вы должны принести свои данные в длинные (т.е. расплавленном) формате, чтобы использовать его с ggplot2:

library("reshape2") 
mdf <- melt(mdf, id.vars="Company", value.name="value", variable.name="Year") 

И тогда вы должны использовать aes(... , group = Company) сгруппировать их:

ggplot(data=mdf, aes(x=Year, y=value, group = Company, colour = Company)) + 
    geom_line() + 
    geom_point(size=4, shape=21, fill="white") 

enter image description here

+0

'df' не будет перезаписывать' статистика :: df', 'r' знает, какой из них вы имеете в виду по контексту. Попробуйте сами: 'df <- data.frame (A = 1: 10); df (df $ A, 1, 5) ' –

+1

@ SeñorO Это то, что я читал уже несколько раз, но вы правы, это не перезаписывается. Так как обратите внимание на себя: никогда не передавайте информацию кому-то другому, не проверив их самостоятельно :-) Я отредактировал свой вопрос. – Beasterfield

+0

Может быть хорошей идеей избежать 'df' в качестве имени переменной - если вы часто ее используете (как и я, против моего собственного совета), то иногда, когда вы забываете определить его, вы получаете загадочную ошибку« Ошибка в df $ foo: объект типа «замыкание» не является подмножеством »вместо того, что лучше« Ошибка: объект «df» не найден ». –

10

Вместо использования возмутительно свернутых структур данных, требуемых ggplot2, вы можете использовать собственные функции R:

tab<-read.delim(text=" 
Company 2011 2013 
Company1 300 350 
Company2 320 430 
Company3 310 420 
",as.is=TRUE,sep=" ",row.names=1) 

tab<-t(tab) 

plot(tab[,1],type="b",ylim=c(min(tab),max(tab)),col="red",lty=1,ylab="Value",lwd=2,xlab="Year",xaxt="n") 
lines(tab[,2],type="b",col="black",lty=2,lwd=2) 
lines(tab[,3],type="b",col="blue",lty=3,lwd=2) 
grid() 
legend("topleft",legend=colnames(tab),lty=c(1,2,3),col=c("red","black","blue"),bg="white",lwd=2) 
axis(1,at=c(1:nrow(tab)),labels=rownames(tab)) 

R multiple lines plot

+2

«возмутительно запутанные структуры данных» более чем сильные. Мне очень полезно использовать данные в этой форме – John

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