2013-12-17 58 views
1

我想绘制三个不同的行与ggplot2,显示三个不同变量(最大,最小和平均温度)的时间序列。问题出现在我想为每一行/变量设置颜色时。R ggplot2通过变量设置颜色行无分组

ggplot命令:

plot.temp=ggplot(data,aes_string(x="date", y="Tmed",colour="Tmed")) + geom_line() + 
    geom_line(data=data,aes_string(x="date",y="Tmin",colour="Tmin")) + 
    geom_line(data=data,aes_string(x="date",y="Tmax",colour="Tmax")) 

为每一行代表一个单一的时间,而不是可用的类别在这里我不使用组。

我试图像scale_color_manual另一个帖子发现不同optinos但随后出现

你可以找到http://ubuntuone.com/45LqzkMHWYp7I0d47oOJ02数据文件可以与data = read.csv(filename,header=T, sep=",",na.strings="-99.9")

我只是想能够很容易地读懂Continuous value supplied to discrete scale错误信息手动设置颜色线但无法找到方式。

在此先感谢。

回答

4

首先,您需要将date转换为Date对象,因为现在它被视为因子。如果将日期视为因素,则将每个date值假定为单独的组。

data$date<-as.Date(data$date) 

其次,由于使用的是aes_string()colour="Tmed"被解释为依赖从实际Tmed值的颜色。使用aes()并且仅为colour=变量引用。也不需要在每个geom_line()中重复data=自变量,因为您使用相同的数据帧。

ggplot(data,aes(x=date, y=Tmed,colour="Tmed")) + geom_line() + 
    geom_line(aes(y=Tmin,colour="Tmin")) + 
    geom_line(aes(y=Tmax,colour="Tmax")) 

当然你也可以融化你的数据,然后你就只需要一个电话geom_line()(但你仍然需要更改日期列)。

library(reshape2) 
data2<-melt(data[,1:4],id.vars="date") 
ggplot(data2,aes(date,value,color=variable))+geom_line() 

enter image description here

+1

+1 reshape2,在开始的时候我只是恨有一个数据帧在那里我已经融化的数据框(而不是到Excel),但现在,我只是喜欢它 – Ananta

+0

感谢@ didzis-elferts这两个解决方案运行良好,但我仍然无法选择图例的颜色和标签。也许'scale_color_manual'? – pacomet

+0

通过添加scale_color_manual(“Temperatura”,values = c('red','brown','blue'),labels = c('Máxima','Media','Mínima'))'是经过一些尝试,我不知道为什么工作。 – pacomet