【问题标题】:How to combine scales for colour and size into one legend?如何将颜色和大小的比例组合成一个图例?
【发布时间】:2015-07-15 14:26:48
【问题描述】:

我想知道如何在大小和颜色来自相同数据的图中为 scale_size() {ggplot2} 中的 size_scale 着色。

例子:

 library(ggplot2)
    df<-as.data.frame(cbind(rep(1:10,10),
                            rep(1:10,each=10),
                            rnorm(100)))

    ggplot(df,aes(V1,V2))+
      geom_point(aes(colour=V3,size=V3))+
      scale_colour_gradient(low="grey", high="black")+
      scale_size(range=c(1,10))

如您所见,V3 与数据点的颜色和大小相同。如何将颜色渐变合并到大小比例(除了在 Illustrator 等程序中手动执行此操作...)?谢谢!

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    使用ggplot2guides() 函数。在这种情况下:

    ggplot(df,aes(V1,V2))+
      geom_point(aes(colour=V3,size=V3))+
      scale_colour_gradient(low="grey", high="black")+
      scale_size(range=c(1,10)) +
      guides(color=guide_legend(), size = guide_legend())
    

    ggplot2 将尝试为您整合尺度。在这种情况下不会,因为色标的默认指南是颜色条,而大小的默认指南是普通图例。一旦将它们都设置为图例,ggplot 2 就会接管并组合它们。

    【讨论】:

      【解决方案2】:

      这可以通过请求不使用colourbar 而是使用颜色图例来实现。使用您的数据框:

        ggplot(df,aes(V1,V2))+
           geom_point(aes(colour=V3,size=V3))+
           scale_colour_gradient(low="grey", high="black",guide="legend")+
           scale_size(range=c(1,10))
      

      如果您还想要彩条,有一个小技巧可以实现这一点,因为您没有使用美学fill。所以你也可以将V3 映射到fill,它会为这个比例绘制一个颜色条:

        ggplot(df,aes(V1,V2))+
           geom_point(aes(colour=V3,size=V3,fill=V3))+
           scale_colour_gradient(low="grey", high="black",guide="legend")+
           scale_size(range=c(1,10)) + 
           scale_fill_gradient(low="grey",high="black") +
           guides(fill=guide_colourbar(reverse=TRUE))
      

      我添加了对 guides 的调用,以使颜色栏中的颜色按照与图例中尺寸相同的方式排序。

      【讨论】:

        猜你喜欢
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-12-04
        • 2022-08-19
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        相关资源
        最近更新 更多