【问题标题】:R ggplot2 set color line by variable without groupingR ggplot2通过变量设置颜色线而不分组
【发布时间】:2013-12-17 12:31:12
【问题描述】:

我试图用 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")) 

我不使用组,因为每一行代表一个时间,这里没有可用的类别。

我尝试了其他帖子中的不同 optinos,例如 scale_color_manual,但随后出现 Continuous value supplied to discrete scale 错误消息

您可以在http://ubuntuone.com/45LqzkMHWYp7I0d47oOJ02 找到可以使用data = read.csv(filename,header=T, sep=",",na.strings="-99.9") 轻松读取的数据文件

我只想手动设置颜色线,但找不到方法。

提前致谢。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

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

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

    其次,当您使用 aes_string() 时,colour="Tmed" 也被解释为取决于实际 Tmed 值的颜色。仅对 colour= 变量使用 aes() 和引号。此外,无需在每个 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()
    

    【讨论】:

    • +1 for reshape2,一开始我只是讨厌有一个必须融化数据框的数据框(而不是 Excel),但现在,我只是喜欢它
    • 感谢@didzis-elferts 两种解决方案都运行良好,但我仍然无法选择图例的颜色和标签。也许是“scale_color_manual”?
    • 通过添加 scale_color_manual("Temperatura",values = c('red', 'brown', 'blue'),labels = c('Máxima','Media','Mínima')) 可以正常工作,但这是经过一些尝试后,我不确定为什么可以工作。
    • 我不确定它之前是否对您有用。这在两种情况下都有效+scale_color_manual(values=c("black","grey","red"))
    猜你喜欢
    • 2015-09-25
    • 2014-12-10
    • 2011-11-28
    • 1970-01-01
    • 2014-11-17
    • 2013-06-15
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多