@agpwhy
2021-07-06T06:40:03.000000Z
字数 2256
阅读 589
关于怎么玩儿好ggplot2里颜色,真的有一本书,五十多欧。
https://www.springer.com/de/book/9780387981413#otherversion=9780387981406
我这里肯定讲不出五十多欧的水平,就简单跟着教程给大家过一下一些基本的东西。
玩儿颜色最重要的变量分别是color和fill。
ggplot(chic, aes(x = date, y = temp)) + geom_point(color = "steelblue", size = 2) + labs(x = "Year", y = "Temperature (°F)")

ggplot(chic, aes(x = date, y = temp)) + geom_point(shape = 21, size = 2, stroke = 1, color = "chartreuse4", fill = "steelblue") + labs(x = "Year", y = "Temperature (°F)")

可以很清楚地看到,color是要比fill要大,fill是不带每个数据点的外框的。
http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
可以用这个参考你需要的颜色
不同数据的颜色选择可以有不同的策略。
是像温度计那样事连续的?还是像分数一样是离散的?是和男女一样是定性的?还是和身高体重一样定量的?
这不同的数据类型就用不同的方式去可视化。
试看此例:
ggplot(chic, aes(x = date, y = temp, color = season)) + geom_point() + labs(x = "Year", y = "Temperature (°F)", color = NULL) + scale_color_manual(values = c("dodgerblue4", "darkolivegreen4", "darkorchid3", "goldenrod1"))

季节是一个离散的分类变量。可以在scale_color_manual中手动制定四个颜色给他们。
如果不想自己选择的话,可以在这里选择一些预设好的配色方案。
RColorBrewer::display.brewer.all()

把你想选的配色方案写到+ scale_color_brewer(palette = "BrBG")

还不满意可以试试paletteer包,ggthemes包,ggsci包
library(ggthemes)
ga + scale_color_tableau()

library(ggsci)
g1 <- ga + scale_color_aaas()
g2 <- ga + scale_color_npg()

ggsci包括了很多经典杂志的配色。
gb <- ggplot(chic, aes(x = date, y = temp, color = temp)) + geom_point() + labs(x = "Year", y = "Temperature (°F)", color = "Temperature (°F):")
可以使用
gb + scale_color_continuous()
gb \+ scale_color_gradient()
来做一些渐变图案
fancy一点的可以这样:
mid <- mean(chic$temp)
gb + scale_color_gradient2(midpoint = mid)

如果不满意三个点的颜色,可以使用 + scale_color_gradient2(midpoint = mid, low = "forestgreen", mid = "grey92", high = "steelblue")

也可以使用+ scale_color_viridis_c() 来选择配色方案(在括号里写option = “inferno“/”plasma“/“cividis”或者啥都不写)
顺带说一嘴,不连续的可以用+ scale_color_viridis_d 来配色
library(rcartocolor)
是使用+ scale_color_carto_c
library(scico)
是使用+ scale_color_scico
scico::scico_palette_names()
[1] "acton" "bamako" "batlow" "berlin" "bilbao" "broc" "brocO" "buda" "cork" "corkO"
[11] "davos" "devon" "grayC" "hawaii" "imola" "lajolla" "lapaz" "lisbon" "nuuk" "oleron"
[21] "oslo" "roma" "romaO" "tofino" "tokyo" "turku" "vik" "vikO"
其他更炫的功能包括在after_scale()中再上一次色
试看此例
library(ggdark)
gplot(chic, aes(date, temp, color = temp)) +
geom_point(size = 5) +
geom_point(aes(color = temp, color = after_scale(invert_color(color))), size = 2) +
scale_color_carto_c(palette = "Teal") +
labs(x = "Year", y = "Temperature (°F)")

联合colorspace这个包可以使用invert_color(),lighten(), darken() 和 desature()

