R-ggplot2-说说绘图中颜色的这点事-应该是比较全的总结篇

0. 问题导入

之前绘图的时候,我经常会去RGB颜色对照表上手动去摘选颜色码,然后手动粘到ggplot-scale_fill/color_manual(values = c('我选的色带'))。但是呢,大家都知道的,男生嘛,对于颜色这方面,是吧......大家都懂的(手动汗颜,表示要向李佳琦好好学习)。一般绘图常态就是画图15秒,调色一小时,简直是开了无数窗口,最后还是强迫症爆炸般地觉得下一个色带一定是最好的。

BUT, HOWEVER


组会上把精心调好的图展示出来的时候,还是有时候会觉得不太好看


于是乎就有了今天这篇帖子,旨在搜罗网上比较全的颜色贴,好好滴总结一波,希望可以帮到同样是选择困难症的你。
绘图所用软件包附于文末, PS:多图预警!!图片加载可能需要画20秒左右,内容精彩,值得期待哈~

1. 示例数据

本次演示采用“全球sc-PDSI(干旱指数)1901-2018年的月尺度数据” 中的2018年12月的数据进行绘图示例。同之前,为了大家下载方便,下附百度云下载链接(如果觉得慢,也可以去数据官网进行下载):
数据下载链接

2. 数据导入与底图绘制

input_data = 'L:\\JianShu\\2019-12-07\\data\\scpdsi_1901_2018.nc'
data = stack(input_data)
data = data[[1416]] #2018-12

df = as.data.frame(data,xy = T)
colnames(df) = c('long','lat','scpdsi')
na_index = which(is.na(df$scpdsi))
df = df[-na_index,]

df$DC = cut(df$scpdsi,
                                breaks = c(-Inf,-5,-4,-3,-2,-1,Inf))

df$DC = factor(df$DC,
                                   labels = c('Exceptional Drought',
                                              'Extreme Drought',
                                              'Severe Drought',
                                              "Moderate Drought",
                                              'Abnormally Dry',
                                              'No Drought'))

# fill bar

p = ggplot()+
  geom_hline(aes(yintercept = 50),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+

  geom_hline(aes(yintercept = 0),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  geom_hline(aes(yintercept = -50),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  geom_vline(aes(xintercept = 0),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  geom_vline(aes(xintercept = -100),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  geom_vline(aes(xintercept = 100),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  
  geom_tile(data = df, aes(x = long,y = lat, fill = DC))+
  theme(panel.background = element_rect(fill = 'transparent',color = 'black'),
        axis.text = element_text(face='bold',colour='black',size=fontsize,hjust=.5),
        axis.title = element_text(face='bold',colour='black',size=fontsize,hjust=.5),
        legend.position=c('bottom'),
        legend.direction = c('horizontal'))+
  coord_fixed(1.3)+
  guides(fill=guide_legend(nrow=3))+
  xlab('Longitude')+
  ylab('Latitude')

3. 增加Viridis 色带

Viridis 色带包由Simon Garnier研发, 包含viridis, magma, plasma, inferno及默认共5个色带组(图1-2),对应scale_fill/color_viridis(option =" " )中的"A", "B", "C", "D","E"五个参数。


图1 Viridis 色带组说明
png('L:\\JianShu\\2019-12-07\\plot\\plot_viridis.png',
    height = 15,
    width = 26,
    units = 'cm',
    res = 1000)

# print(p_viridis)


p_viridis = grid.arrange(
  p + scale_fill_viridis(option = 'A',discrete = T)+labs(x="Virdis A", y=NULL),
  p + scale_fill_viridis(option = 'B',discrete = T)+labs(x="Virdis B", y=NULL),
  p + scale_fill_viridis(option = 'C',discrete = T)+labs(x="Virdis C", y=NULL),
  p + scale_fill_viridis(option = 'D',discrete = T)+labs(x="Virdis D", y=NULL),
  p + scale_fill_viridis(option = 'E',discrete = T)+labs(x="Virdis E", y=NULL),
  ncol=3, nrow=2
)

dev.off()
图2 Viridis 色带展示

4. 增加 RColorBrewer 色带

RColorBrewer这个应用很广泛了,附色带图谱及应用示例(图3-6)。


图3 Viridis 色带展示

4.1 RColorBrewer 色带组1

png('L:\\JianShu\\2019-12-07\\plot\\plot_rcolor_brewer.png',
    height = 26,
    width = 26,
    units = 'cm',
    res = 1000)

p_rcolor_brewer = grid.arrange(
  p+scale_fill_brewer(palette = 'YlOrRd')+labs(x="ColorBand: YlOrRd", y=NULL),
  p+scale_fill_brewer(palette = 'YlOrBr')+labs(x="ColorBand: YlOrBr", y=NULL),
  p+scale_fill_brewer(palette = 'YlGnBu')+labs(x="ColorBand: YlGnBu", y=NULL),
  
  p+scale_fill_brewer(palette = 'YlGn')+labs(x="ColorBand: YlGn", y=NULL),
  p+scale_fill_brewer(palette = 'Reds')+labs(x="ColorBand: Reds", y=NULL),
  p+scale_fill_brewer(palette = 'RdPu')+labs(x="ColorBand: RdPu", y=NULL),
  
  p+scale_fill_brewer(palette = 'Purples')+labs(x="ColorBand: Purples", y=NULL),
  p+scale_fill_brewer(palette = 'PuRd')+labs(x="ColorBand: PuRd", y=NULL),
  p+scale_fill_brewer(palette = 'PuBuGn')+labs(x="ColorBand: PuBuGn", y=NULL),
  
  ncol = 3
)

dev.off()
图4 RColorBrewer 色带组1

4.1 RColorBrewer 色带组2

png('L:\\JianShu\\2019-12-07\\plot\\plot_rcolor_brewer2.png',
    height = 26,
    width = 26,
    units = 'cm',
    res = 1000)

p_rcolor_brewer = grid.arrange(
  p+scale_fill_brewer(palette = 'PuBu')+labs(x="ColorBand: PuBu", y=NULL),
  p+scale_fill_brewer(palette = 'OrRd')+labs(x="ColorBand: OrRd", y=NULL),
  p+scale_fill_brewer(palette = 'Oranges')+labs(x="ColorBand: Oranges", y=NULL),
  
  p+scale_fill_brewer(palette = 'Greys')+labs(x="ColorBand: Greys", y=NULL),
  p+scale_fill_brewer(palette = 'Greens')+labs(x="ColorBand: Greens", y=NULL),
  p+scale_fill_brewer(palette = 'GnBu')+labs(x="ColorBand: GnBu", y=NULL),
  
  p+scale_fill_brewer(palette = 'BuPu')+labs(x="ColorBand: BuPu", y=NULL),
  p+scale_fill_brewer(palette = 'BuGn')+labs(x="ColorBand: BuGn", y=NULL),
  p+scale_fill_brewer(palette = 'Blues')+labs(x="ColorBand: Blues", y=NULL),
  ncol = 3
)

dev.off()
图5 RColorBrewer 色带组2

4.1 RColorBrewer 色带组3

png('L:\\JianShu\\2019-12-07\\plot\\plot_rcolor_brewer3.png',
    height = 15,
    width = 26,
    units = 'cm',
    res = 1000)

p_rcolor_brewer = grid.arrange(
  p+scale_fill_brewer(palette = 'RdYlBu')+labs(x="ColorBand: RdYlBu", y=NULL),
  p+scale_fill_brewer(palette = 'RdBu')+labs(x="ColorBand: RdBu", y=NULL),
  p+scale_fill_brewer(palette = 'PuOr')+labs(x="ColorBand: PuOr", y=NULL),
  
  p+scale_fill_brewer(palette = 'PRGn')+labs(x="ColorBand: PRGn", y=NULL),
  p+scale_fill_brewer(palette = 'PiYG')+labs(x="ColorBand: PiYG", y=NULL),
  p+scale_fill_brewer(palette = 'BrBG')+labs(x="ColorBand: BrBG", y=NULL),
  ncol = 3
)

dev.off()
图6 RColorBrewer 色带组3

5. 增加 GGSCI 色带(来自一些顶级期刊,如柳叶刀)

GGSCI这个色带组收集了一些主流SCI期刊中比较受欢迎与经典的色带组(图7),分别包括:

  • scale_color/fill_npg(): 对应Nature Publishing Group色带
  • scale_color/fill_aaas(): 对应American Association for the Advancement of Science 色带
  • scale_color/fill_lancet: 对应Lancet (柳叶刀)期刊搜集的色带组
  • scale_color/fill_jco: 对应Journal of Clinical Oncology 色带组
  • scale_color/fill_tron: 对应Tron Legacy 色带组
png('L:\\JianShu\\2019-12-07\\plot\\plot_ggsci.png',
    height = 15,
    width = 26,
    units = 'cm',
    res = 1000)

p_rcolor_brewer = grid.arrange(
  p+scale_fill_npg()+labs(x="ColorBand: NRC", y=NULL),
  p+scale_fill_aaas()+labs(x = 'ColorBand: AAAS',y = NULL),
  p+scale_fill_lancet()+labs(x = 'ColorBand: Lancet',y = NULL),
  p+scale_fill_jco()+labs(x = 'ColorBand: JCO',y = NULL),
  p+scale_fill_tron()+labs(x = 'ColorBand: TRON',y = NULL),
  ncol = 3
)

dev.off()
图7 GGSCI 色带示例

6. 增加 Wes Anderson色带(来自一些顶级期刊,如柳叶刀)

由于Wes Anderson 色带组中大多颜色带所含颜色数量为4-5个(图8-9),因此在此,我对 df 中的干旱分类组进行压缩,将Abnormal dry 与 No drought 进行合并。

图8 Wes Anderson色带组
df$DC2 = cut(df$scpdsi,
            breaks = c(-Inf,-5,-4,-3,-2,Inf))

df$DC2 = factor(df$DC2,
               labels = c('Exceptional Drought',
                          'Extreme Drought',
                          'Severe Drought',
                          "Moderate Drought",
                          'AD and No Drought'))

p1 = ggplot()+
  geom_hline(aes(yintercept = 50),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  
  geom_hline(aes(yintercept = 0),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  geom_hline(aes(yintercept = -50),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  geom_vline(aes(xintercept = 0),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  geom_vline(aes(xintercept = -100),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  geom_vline(aes(xintercept = 100),linetype = 'dashed',alpha = 0.5,lwd = 0.5,color = 'black')+
  
  geom_tile(data = df, aes(x = long,y = lat, fill = DC2))+
  theme(panel.background = element_rect(fill = 'transparent',color = 'black'),
        axis.text = element_text(face='bold',colour='black',size=fontsize,hjust=.5),
        axis.title = element_text(face='bold',colour='black',size=fontsize,hjust=.5),
        legend.position=c('bottom'),
        legend.direction = c('horizontal'))+
  coord_fixed(1.3)+
  guides(fill=guide_legend(nrow=3))+
  xlab('Longitude')+
  ylab('Latitude')

png('L:\\JianShu\\2019-12-07\\plot\\plot_web_anderson.png',
    height = 26,
    width = 26,
    units = 'cm',
    res = 1000)

p_rcolor_brewer = grid.arrange(
  p1+scale_fill_manual(values = wes_palette('Rushmore1'))+labs(x="ColorBand: Rushmore1", y=NULL),
  p1+scale_fill_manual(values = wes_palette('Zissou1'))+labs(x="ColorBand: Zissou1", y=NULL),
  p1+scale_fill_manual(values = wes_palette('Darjeeling1'))+labs(x="ColorBand: Darjeeling1", y=NULL),
  
  p1+scale_fill_manual(values = wes_palette('BottleRocket2'))+labs(x="ColorBand: BottleRocket2", y=NULL),
  p1+scale_fill_manual(values = wes_palette('Royal2'))+labs(x="ColorBand: Royal2", y=NULL),
  p1+scale_fill_manual(values = wes_palette('Darjeeling2'))+labs(x="ColorBand: Darjeeling2", y=NULL),
  
  p1+scale_fill_manual(values = wes_palette('FantasticFox1'))+labs(x="ColorBand: FantasticFox1", y=NULL),
  p1+scale_fill_manual(values = wes_palette('Moonrise3'))+labs(x="ColorBand: Moonrise3", y=NULL),
  p1+scale_fill_manual(values = wes_palette('Cavalcanti1'))+labs(x="ColorBand: Cavalcanti1", y=NULL),
  
  ncol = 3
)

dev.off()
图9 Wes Anderson 色带组示例

7. 本文所用软件包-木有的话,可以用install.packages('软件包名')进行安装

library(viridis)
library(RColorBrewer)
library(ggsci)
library(wesanderson)
library(ggplot2)
library(gridExtra)

8. 致谢

大家如果觉得有用,还麻烦大家关注点赞,也可以扩散到朋友圈,帮助到绘图中同样陷入颜色选择困难症的TA

大家如果在使用本文代码的过程有遇到问题的,可以留言评论,也可以私信我哈~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容