【问题标题】:ggplot legend key color and itemsggplot 图例键颜色和项目
【发布时间】:2013-09-02 09:02:27
【问题描述】:

使用以下数据框:

sdf<-data.frame(hours=gl(n=3,k=1,length=9,labels=c(0,2,4)),    
                count=c(4500,1500,2600,4000,800,200,1500,50,20),
                machine=gl(n=3,k=3,length=9,labels=c("A","B","C")))

可以使用以下任一脚本生成以下图表:

ggplot(data=sdf,aes(x=hours,y=count,group=machine,fill=machine))+
  geom_area(data=sdf[sdf$machine=="A",])+
  geom_area(data=sdf[sdf$machine=="B",])+
  geom_area(data=sdf[sdf$machine=="C",])

ggplot(data=sdf,aes(x=hours,y=count,group=machine,fill=machine))+
  geom_area(position="dodge")

但是,当填充颜色发生变化时,图例中的项目会消失。

ggplot(data=sdf,aes(x=hours,y=count,group=machine,fill=machine))+
  geom_area(data=sdf[sdf$machine=="A",])+
  geom_area(data=sdf[sdf$machine=="B",],fill="darkorchid")+
  geom_area(data=sdf[sdf$machine=="C",])

理想情况下,图例应显示颜色变化。

问题:什么脚本可以在图例中创建项目并为这些项目提供颜色控件?

【问题讨论】:

    标签: r ggplot2 legend legend-properties


    【解决方案1】:

    您可以使用scale_X_manual(values=(whatever)) 调整分配给任何美学的值。这里你要scale_fill_manual

    ggplot(data=sdf,aes(x=hours,y=count,group=machine,fill=machine))+
      geom_area(position="dodge") + 
      scale_fill_manual(values=c("red", "darkorchid", "green"))
    

    请注意,作为一项规则,您希望让ggplot 为您分组数据,就像您在第二个ggplot 调用中所做的那样(这就是group 参数的作用)。正如您在第一个示例中所做的那样,分别提供每个“切片”数据,这几乎违背了ggplot2 的目的,应该避免。

    【讨论】:

    • 非常感谢您回答这个问题!我可能会提出另一个问题来询问如何单独改变这些图表。我想知道如何在机器 B 的图表上使用 alpha=0.5,而不是其他机器。
    • 同理:... + scale_alpha_manual(values=c(1, 0.5, 1))
    • 不幸的是,使用 ...+ scale_alpha_manual(values=c(1, 0.5, 1)) 不会更改此示例中的任何 alpha 值。
    • 我的错:我忘了提到您需要在ggplot 调用中指定alpha 映射:aes(x=hours,y=count, group=machine, fill=machine, alpha=machine)。本质上,您首先告诉 ggplot2 alpha 值将取决于 machine 列中的数据,然后您告诉 ggplot 它们应该如何对应(即级别 A 获得 1 的 alpha,级别 B 获得 0.5等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2017-02-05
    • 2019-11-12
    相关资源
    最近更新 更多