美文网首页R plotIMP research
11.ggplot2——色阶与图例(二)

11.ggplot2——色阶与图例(二)

作者: denghb001 | 来源:发表于2021-12-02 07:31 被阅读0次

    11.3 离散色阶

    离散颜色和填充出现在许多情况下。一个典型的例子是一个条形图,它将位置和填充都编码为相同的变量。

    df <- data.frame(x = c("a", "b", "c", "d"), y = c(3, 4, 1, 2))
    bars <- ggplot(df, aes(x, y, fill = x)) + 
      geom_bar(stat = "identity") + 
      labs(x = NULL, y = NULL) +
      theme(legend.position = "none")
    

    离散颜色的默认方法是scale_fill_discrete()默认值,scale_fill_hue()也能生成相同的图:

    bars
    bars + scale_fill_discrete()
    bars + scale_fill_hue()
    
    image.png

    这个默认比例有一些限制(稍后讨论),将首先讨论用于生成更好的离散调色板的工具。

    11.3.1 Brewer scales

    scale_colour_brewer()是一个离散的色阶,它和连续的模拟scale_colour_distiller()和分箱模拟scale_colour_fermenter()一起使用,从http://colorbrewer2.org/中精心挑选的“ColorBrewer”颜色。这些颜色在各种情况下都能很好地工作,尽管重点是在地图上,所以颜色往往在大区域显示时效果更好。有很多不同的选择:

    RColorBrewer::display.brewer.all()
    
    image.png

    第一组调色板是顺序刻度,当离散刻度是有序(例如,排名数据)时非常有用,并且可用于使用scale_colour_distiller()用于连续数据。对于无序分类数据,最感兴趣的调色板是第二组中的调色板。'Set1' 和 'Dark2' 对点特别有用,'Set2'、'Pastel1'、'Pastel2' 和 'Accent' 对区域效果很好。

    bars + scale_fill_brewer(palette = "Set1")
    bars + scale_fill_brewer(palette = "Set2")
    bars + scale_fill_brewer(palette = "Accent")
    
    image.png

    请注意,没有任何调色板对所有图形都适用。散点图通常使用小的绘图标记,明亮的颜色往往比微妙的效果更好:

    # scatter plot
    df <- data.frame(x = 1:3 + runif(30), y = runif(30), z = c("a", "b", "c"))
    point <- ggplot(df, aes(x, y)) +
      geom_point(aes(colour = z))  + 
      theme(legend.position = "none") +
      labs(x = NULL, y = NULL)
    
    # three palettes
    point + scale_colour_brewer(palette = "Set1")
    point + scale_colour_brewer(palette = "Set2")  
    point + scale_colour_brewer(palette = "Pastel1")
    
    image.png

    条形图通常包含大块颜色,明亮的颜色可能会让人难以抗拒。在这种情况下,微妙的颜色往往效果更好:

    # bar plot
    df <- data.frame(x = 1:3, y = 3:1, z = c("a", "b", "c"))
    area <- ggplot(df, aes(x, y)) + 
      geom_bar(aes(fill = z), stat = "identity") + 
      theme(legend.position = "none") +
      labs(x = NULL, y = NULL)
    
    # three palettes
    area + scale_fill_brewer(palette = "Set1")
    area + scale_fill_brewer(palette = "Set2")
    area + scale_fill_brewer(palette = "Pastel1")
    
    image.png

    11.3.2 色调和灰度

    默认配色方案在 HCL 色轮周围选择均匀分布的色调。这适用于多达大约八种颜色,但之后就很难区分不同的颜色。您可以使用hcl参数控制默认色度和亮度以及色调范围:

    bars
    bars + scale_fill_hue(c = 40)
    bars + scale_fill_hue(h = c(180, 300))
    
    image.png

    默认配色方案的一个缺点是,因为所有颜色都具有相同的亮度和色调,所以当您以黑白方式打印它们时,它们都显示为相同的灰色阴影。请注意,如果您打算以黑白打印离散色阶,最好使用scale_fill_grey()将离散数据映射到灰色,从浅到深:

    bars + scale_fill_grey()
    bars + scale_fill_grey(start = 0.5, end = 1)
    bars + scale_fill_grey(start = 0, end = 0.5)
    
    image.png

    11.3.3 手动调色

    如果挑选的调色板都不适合,或者您有自己喜欢的颜色,您可以使用scale_fill_manual()手动设置颜色。如果您希望选择突出二级分组结构的颜色或引起对不同比较的注意,这会很有用:

    bars + scale_fill_manual(values = c("sienna1", "sienna4", "hotpink1", "hotpink4"))
    bars + scale_fill_manual(values = c("tomato1", "tomato2", "tomato3", "tomato4"))
    bars + scale_fill_manual(values = c("grey", "black", "grey", "grey"))
    
    image.png

    您还可以使用命名向量来指定要分配给每个级别的颜色,这允许您按您喜欢的任何顺序指定级别:

    bars + scale_fill_manual(values = c(
      "d" = "grey",
      "c" = "grey",
      "b" = "black",
      "a" = "grey"
    ))
    
    image

    11.4 分箱颜色标度

    色阶也能进行分箱。默认标度scale_fill_binned(),转换为scale_fill_steps()。这些标度有一个n.breaks参数来控制由比例创建的离散颜色类别的数量。与直觉相反,因为人类的视觉系统非常擅长检测边缘,这有时会使连续的颜色梯度更容易被感知:

    erupt + scale_fill_binned()
    
    image
    erupt + scale_fill_steps()
    
    image
    erupt + scale_fill_steps(n.breaks = 8)
    
    image

    在其他方面scale_fill_steps()类似于scale_fill_gradient(),并允许您构建自己的双色渐变。还有一种三色变体scale_fill_steps2()和 n 色标度变体scale_fill_stepsn(),它们的行为与其连续对应物相似:

    erupt + scale_fill_steps(low = "grey", high = "brown")
    
    image
    erupt + scale_fill_steps2(low = "grey", mid = "white", high = "brown", midpoint = .02)
    
    image
    erupt + scale_fill_stepsn(n.breaks = 12, colours = terrain.colors(12))
    
    image

    也存在用于分级的brewer analog,称为scale_fill_fermenter()

    erupt + scale_fill_fermenter(n.breaks = 9)
    
    image
    erupt + scale_fill_fermenter(n.breaks = 9, palette = "Oranges")
    
    image
    erupt + scale_fill_fermenter(n.breaks = 9, palette = "PuOr")
    
    image.png

    注意,如离散函数scale_fill_brewer()、连续函数scale_fill_distiller()与分箱函数scale_fill_fermenter()不会在brewer颜色之间进行插值,如果您设置n.breaks的颜色大于调色板中的颜色数量,则会出现警告消息,并且不会显示某些颜色。

    11.5 Alpha标度

    Alpha标度将阴影的透明度映射到数据中的一个值。它们通常不是很有用,但可以是一种方便的方法,可以直观地减轻不太重要的观察。Scale_alpha()scale_alpha_continuous()的别名,因为这是alpha最常用的用法,它可以节省一些输入。

    相关文章

      网友评论

        本文标题:11.ggplot2——色阶与图例(二)

        本文链接:https://www.haomeiwen.com/subject/pkyatrtx.html