r - 如何在ggplot中对颜色进行分组?

标签 r ggplot2

我想绘制属于群体的个人的一些数据。

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 

然后,我们从两个不同的调色板创建颜色样本向量(安装包 grDevicescolorRamps):

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)

enter image description here

该解决方案还要求这两个组按值排序,因此我不确定它在实际数据场景中的适用性如何。

关于r - 如何在ggplot中对颜色进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52310116/

相关文章:

regex - 在 R 中使用正则表达式删除两种模式(字符串和数字)

r - 是否可以根据条件从不同的数据框中估算多个值?

oop - 如何定义 S4 类的子集运算符?

r - 将 gsub 用于 R 中字符串中的特定事件?

r - 使用 stat_summary_hex 以离散色标显示最频繁的值

python - 使用 Plotnine 按排序顺序绘图

r - 将 data.table 链分成两行代码以提高可读性

r - ggplot2 中的密度图和直方图

r - 使用 ggplot 用不同颜色绘制多个数据帧

R ecdf 折线图上的高亮点