美文网首页计算机语言百年工匠工具文
【R>>RColorBrewer】神仙函数colorRampPa

【R>>RColorBrewer】神仙函数colorRampPa

作者: 高大石头 | 来源:发表于2021-08-09 14:12 被阅读0次

    首先声明下面整理的内容都来自于网络,并在文末注明了引用的出处,本内容仅用于学习交流,禁止用于商业用途,如有侵权,请联系删除。
    目前自己常用的调色R包有:

    • ggsci
    • RColorBrewer
      之前已经简单学习过ggsci,这次来探讨下RColorBrewer包。

    基础知识

    常用的配色方式有RGB和CMYK。
    RGB:一种发光的色彩模式,你在一间黑暗的房间内仍然可以看见屏幕上的内容;
    CMYK:一种依靠反光的色彩模式,我们是怎样阅读报纸的内容呢?是由阳光或灯光照射到报纸上,再反射到我们的眼中,才看到内容。它需要有外界光源,如果你在黑暗房间内是无法阅读报纸的。
    从理论上来说,只需要CMY三种油墨就足够了,它们三个加在一起就应该得到黑色。但是由于目前制造工艺还不能造出高纯度的油墨,CMY相加的结果实际是一种暗红色。因此还需要加入一种专门的黑墨来调和。所以CMYK是利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。四种标准颜色是:

    C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’M:Magenta = 品红色,又称为‘洋红色’;Y:Yellow = 黄色;K:Key Plate(blacK) = 定位套版色(黑色)


    颜色代码是十六进制的,分别是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F表示,越往左越靠近黑色,往右越靠近红色。
    颜色代码前两位是红色(Red),中间两位代表绿色(Green),后两位是蓝色(Blue)。
    因此,红色:FF0000; 绿色:00FF00; 蓝色:0000FF。

    RColorBrewer概述

    核心函数:

    • display.brewer.all()
    • brewer.pal.info
    • display.brewer.pal(9,"Paired")
    • brewer.pal(9,"Paired")[3:8]:选择亚组中的颜色
    library(RColorBrewer)
    display.brewer.all() #显示所有调色板
    

    可以看出其调色板可分为3类,到底具体是哪三类?

    brewer.pal.info #返回画板名称,最大颜色数等,以文本的形式展示
    table(brewer.pal.info$category) #查看画板情况
    

    综上所述,RColorBrewer共提供了3类调色板,并可以用brewer.pal()生成需要的颜色,这3类包括:
    • 连续型sequential:共18组颜色,每组9个渐变色。
    • 离散型diverging:共9组颜色,生成深色强调两端、浅色标识中部的系列颜色。
    • 定性型qualitative:共9组颜色,生成一系列彼此差异比较明显的颜色,通常用来标记分类数据。
    display.brewer.all(type = "div")
    display.brewer.all(type = "qual")
    display.brewer.all(type = "seq")
    

    如果只看其中一组的颜色,用display.brewer.pal()查看。

    display.brewer.pal(9,"Paired")
    

    colorRampPalette

    下面来介绍RColorBrewer的神仙函数colorRampPalette
    核心函数:

    • colorRampPalette(brewer.pal(9,"Set1"))(n)
      下面直接实战:
    library(RColorBrewer)
    lp <- data.frame(city=c("全国","江苏","广东", "浙江","全球平均","中高收入","美国","英国","德国","高收入","日本"),
                     value=c(77,78,78,80,73,76,79,81,81,81,84))
    lp$city <- factor(lp$city,levels = lp$city)
    
    ggplot(lp,aes(city,value,fill=city))+
      geom_bar(stat="identity",width=0.5)+
      geom_text(aes(label=value),size=4,color="black",fontface="bold",hjust=-0.5)+
      theme_bw()+
      ylim(c(0,100))+
      labs(x="",y="")+
      theme(legend.position = "",
            axis.text = element_text(face = "bold",size=16))+
      coord_flip()+
      scale_fill_brewer(palette = "Set1")
    

    上图中有11个组别,但是“Set1”只有9种颜色,怎么处理这个情况呢?
    这个时候神仙函数colorRampPalette该来救场了,咱们只需要给colorRampPalette点颜色,就可以从里面任意取色了。
    x <- colorRampPalette(c("royalblue","firebrick3"))(12)
    scales::show_col(x)
    
    y <- colorRampPalette(c("royalblue","white","firebrick3"))(56)
    scales::show_col(y)
    

    还可以让颜色更深些:

    scales::show_col(colorRampPalette(c(rep("royalblue",3),"white",rep("firebrick3",3)))(56))
    

    ColorCount <- length(unique(lp$city))
    getPalette <- colorRampPalette(brewer.pal(9,"Set1"))
    scales::show_col(getPalette(ColorCount))

    ![](https://img.haomeiwen.com/i17982813/264bbcee014baefb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

    ggplot(lp,aes(city,value,fill=city))+
    geom_bar(stat="identity",width=0.5)+
    geom_text(aes(label=value),size=4,color="black",fontface="bold",hjust=-0.5)+
    theme_bw()+
    ylim(c(0,100))+
    labs(x="",y="")+
    theme(legend.position = "",
    axis.text = element_text(face = "bold",size=16))+
    coord_flip()+
    scale_fill_manual(values = getPalette(ColorCount))

    ![](https://img.haomeiwen.com/i17982813/70b124e5515919ae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    原来`brewer.pal(9,"Set1")`的9种颜色,经过`colorRampPalette`的变换,神奇的达到了11种元素的需求。
    
    参考链接:
    医学统计与R语言:ggplot中填充颜色不够怎么办?(公众号:医学统计与R语言)
    [R语言绘图的颜色:两包](https://zhuanlan.zhihu.com/p/37020820)
    [R 调色—Palette](https://zhuanlan.zhihu.com/p/75529389)
    

    相关文章

      网友评论

        本文标题:【R>>RColorBrewer】神仙函数colorRampPa

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