我想绘制一些属于组的个人数据。
library(dplyr)
library(ggplot2)
x <- rep(1:10, 10)
y <- c(1:10, 2:11, 3:12, 4:13, 5:14, 6:15, 7:16, 8:17, 9:18, 10:19)
z <- c(rep(1, 10), rep(2, 10), rep(3, 10), rep(4, 10), rep(5, 10), rep(6, 10), rep(7, 10), rep(8, 10), rep(9, 10), rep(10, 10)) %>%
as.factor()
z2 <- c(rep(1, 50), rep(2, 50))
tibble(x, y, z, z2) %>%
ggplot(aes(x = x,
y = y,
color = z)) +
geom_line()
简单的第一步是为z中的每个人分配不同的颜色。
但是,理想情况下,我将另外能够根据z2进行分组,例如,第1组中的每个人在红色光谱中都有一种颜色,而第2组中的每个人在蓝色光谱中都有一种颜色(等等上)。
有没有办法以编程方式执行此操作?
此解决方案仅可针对每个组所需的不同颜色数量进行扩展,而不能针对您拥有的组数量(因此只有两个组)进行扩展:
首先,我们提取的唯一值数量z
:
colornumbers <- sapply(split(df, df$z2), function(x) length(unique(x$z)))
> colornumbers
1 2
5 5
然后,我们从两个不同的调色板(安装包grDevices
和colorRamps
)创建一个颜色样本矢量:
mycolors <- as.vector(mapply(function(x, y){
x(y)
}, list(grDevices::heat.colors, colorRamps::blue2green), colornumbers))
> mycolors
[1] "#FF0000FF" "#FF5500FF" "#FFAA00FF" "#FFFF00FF" "#FFFF80FF" "#0000FF" "#0040BF" "#008080" "#00BF40" "#00FF00"
现在,我们用绘制scale_color_manual
:
tibble(x, y, z, z2) %>%
ggplot(aes(x = x,
y = y,
color = z)) +
geom_line() +
scale_color_manual(breaks = z, values = mycolors)
此解决方案还要求将这两个组按值进行排序,因此我不确定它在实际数据场景中的适用性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句