如果你在读研读博的过程中积累了一些经验,不管内容是关于数据处理、论文写作,还是实验室的家常里短,师兄师姐的爱恨情仇,都欢迎你来公众号投稿。
大家好,在这里给大家介绍一下使用ggplot2绘图调色的几种小方法。正所谓绘图十分钟,调色一小时。图片的配色直接决定了图片质量的好坏。下面讲一下我平时绘图用到的调色工具。
data <- data.frame(
name=letters[1:9],
value=sample(seq(10,20),9))
data
library(ggplot2)
ggplot(data=data,aes(name,value,fill=name))+
geom_bar(stat = "identity")
image.png
RColorBrewer 包是一个专门调色的包,包含三种类型的配色:
(小明评论:这三个类型的配色我的理解是 1 sequential 如果你的数据是1,2,3,4,这种有大小,配色可以选择这种类型,数值比较小,颜色会比较浅,数值比较大,颜色会比较深;2 qualitative 定性的 适用于分类变量,就是数据是 A B C D这种,没有大小,只是类别不一样;3 diverging 这个暂时不理解是什么意思)
先把调色板调出来看一下
library(RColorBrewer)
help(package="RColorBrewer")
display.brewer.all()
image.png
1 对应的应该是sequential 2 对应的是 qualitative 3 对应的是diverging
生成颜色值我们需要使用brewer.pal()
函数,这个函数又两个参数,第一个参数是调色板左侧的名字,第二个位置是生成几个颜色
比如做柱形图,我们选择分类的颜色
colors<-brewer.pal(name="Set3",9)
colors
这样就生成了9个颜色,接下来用这个颜色填充柱形图
ggplot(data=data,aes(name,value,fill=name))+
geom_bar(stat = "identity")+
scale_fill_manual(values = colors)+
theme_bw()
image.png
这是一个在线配色网站 https://colorbrewer2.org/ 超赞!网站的画风是这样的。
image.png
与RColorBrewer 包一样也是分为sequential,qualitative,diverging三个部分。点击它们会出现不同的颜色分类。这次咱们试一试渐变色。
ggplot(data=data,aes(name,value,fill=name))+
geom_bar(stat = "identity")+
theme_bw()+
scale_fill_manual(values = c("#f7fcfd","#e5f5f9",
"#ccece6","#99d8c9",
"#66c2a4",
"#41ae76","#238b45","#006d2c","#00441b"))
image.png
友情提示:使用这个在线配色网站需要科学上网
“我于人间全无敌,不与天战与谁战”——柳白
image.png
很喜欢这张柳白大战昊天的照片,喜欢柳白一往无前的大河剑气(视频截图,原视频颜色看起来很纯净),现在我想把剑气的颜色放到我的绘图中,该怎么办呢?
RImagePalette完美解决了这个问题
install.packages("RImagePalette")
library("RImagePalette")
myfigure <- jpeg::readJPEG(file.choose()) #选择你想上传的图片
display_image(myfigure)
image.png
这样,就把照片导入Rstudio了,下面把图片中的颜色提取出来。
mycolors <- image_palette(myfigure, n=30)
scales::show_col(mycolors)
image.png
颜色提取完了,不过我最想要的白色没提取成功,可能和图片太糊有关。图片里的颜色不能直接复制,我就不试效果了。大家如果知道怎么把这些颜色的代码导出来可以在评论区里说一下,谢谢。
(这里mycolors直接就是包含颜色值的向量)
ggsci我最喜欢的调色R包了,里面包含nature,science,柳叶刀等知名杂志的调色风格。前面介绍的三种方法还是需要我们自己去挑选颜色,去配色。有时候感觉自己配出的颜色还是不好看,ggsci包的出现完美解决了这个问题,与ggplot2包联用可以绘制各式符合杂志要求的配色方案,我最喜欢包里面Nature风格的配色。现在试试Nature期刊的颜色风格。
library(ggsci)
ggplot(data=data,aes(name,value,fill=name))+
geom_bar(stat = "identity")+
scale_fill_npg()
image.png
ggplot(data=data,aes(name,value,fill=name))+
geom_bar(stat = "identity")+
scale_fill_aaas()
image.png
image.png
好的,今天的分享就到这里,感觉有用的话,各位老铁点个赞吧!
排版编辑:小明
今天推文的示例代码下载链接会放到次条推文的留言区,如果需要的话可以到次条留言区获取
欢迎大家关注我的公众号