【问题标题】:ggplot - custom legend in multiple layers doesn't workggplot - 多层中的自定义图例不起作用
【发布时间】:2015-12-03 11:31:16
【问题描述】:

我希望为我的图表制作自定义图例,我参考了这两个帖子 posts posts

试过了,还是不行

g2=ggplot(data=juga, aes(x=Date, group=0))+
geom_line(aes(y=Dow),colour="cornflowerblue")+
geom_line(aes(y=NASDAQ),colour="firebrick2")+
geom_line(aes(y=S.P.500),colour="gold2")+
geom_line(aes(y=Nikkei.225),colour="gray69")+
geom_line(aes(y=Shanghai),colour="forestgreen")+
geom_line(aes(y=KOSPI),colour="black")+
xlab("Dates") +ylab("Values")+
ggtitle("Juga graph") 
g2

这是我的原始代码,它的图形看起来像这样

为了添加图例,我更改了这样的代码

cols <- c("A"="cornflowerblue","B"="firebrick2","C"="gold2", "D"="gray69", "E"="forestgreen", "F"="black")
g2=ggplot(data=juga, aes(x=Date, group=0))+
geom_line(aes(y=Dow),colour="A")+
geom_line(aes(y=NASDAQ),colour="B")+
geom_line(aes(y=S.P.500),colour="C")+
geom_line(aes(y=Nikkei.225),colour="D")+
geom_line(aes(y=Shanghai),colour="E")+
geom_line(aes(y=KOSPI),colour="F")+
scale_colour_manual(values=cols)+xlab("Dates") +ylab("Values")+
ggtitle("Juga graph")
g2

但是这段代码会出错

grDevices::col2rgb(color, TRUE) 中的错误:颜色名称“A”无效

我该如何解决?

【问题讨论】:

  • 首先,我建议您提供一个可重现的示例 - 就像您引用的帖子中一样。
  • 也许更容易的是melt 数据,然后根据您的组(变量)使用group 并将color 内的aes 设置为您的变量。然后你可以手动指定颜色,避免多放5个geom_line

标签: r ggplot2


【解决方案1】:

试试这个:

library(reshape2)

df <- melt(juga,id.vars="Date")
cols <- c("Dow"="cornflowerblue","NASDAQ"="firebrick2","S.P.500"="gold2",
          "Nikkei.225"="gray69","Shanghai"="forestgreen","KOSPI"="black")

g2 <- ggplot(df,aes(x=Date,y=value,group=variable,color=variable))+
  geom_line()+xlab("Dates")+ylab("Values")+ggtitle("Juga graph")+theme_bw()
  scale_colour_manual(values=cols)

另外,如果您的日期尚未采用日期格式,我建议您转换它们,以便日期在 x 轴上可见。我真的看不出它们目前的格式,但您可以执行以下操作:

df$Date <- as.Date(df$Date)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2015-05-10
    • 2020-07-28
    • 2022-01-23
    • 2021-08-14
    • 2018-09-15
    • 2022-01-09
    相关资源
    最近更新 更多