R ggplot2 按组指定单独的颜色渐变

标签 r ggplot2

我正在尝试为显示在同一个散点图上的分组数据制作单独的颜色渐变。我在下面包含了示例数据。 user是唯一的用户id,task是唯一的任务id,days_completion是任务完成的天数,task_group是任务分组的组指示符,task_order是任务对用户可用的顺序去完成。每行代表用户完成特定任务的时间。 task_order 可能不会逻辑上遵循此组织,因为它是随机生成的,但它应该足以进行演示。

生成的图的 x 轴为 days_completion,y 轴为用户,geom_point 中的每个点都代表用户完成任务的时间(以天为单位)。每个任务组都有自己的颜色,按照 task_order 从深到浅的渐变。例如,任务组 1 在任务顺序 == 1 时为深红色,在任务顺序 == 7 时为浅红色。

示例代码如下:

library(dplyr)
library(forcats)
library(ggplot2)

test_data <- tibble(user = rep(seq(1:50), 10) %>% 
                      as_factor(),
                    task = sample(1:10, 500, replace = TRUE) %>% 
                      as_factor(),
                    days_completion = sample(1:500, 500, replace = FALSE),
                    task_group = sample(1:3, 500, replace = TRUE) %>% 
                      as_factor(),
                    task_order = sample(1:7, 500, replace = TRUE, prob = c(rep(.25,3),.2,.2,.1,.1)) %>% 
                      as_factor()) %>% 
  arrange(days_completion)

#Sample plotting approach; does not work
test_plot <- test_data %>% 
              ggplot(aes(x = days_completion, y = user, color = task)) +
              geom_point() +
              #This seems to be what I need, but I can't figure out how to specify multiple gradients by task_group
              scale_color_gradient()

我知道我可以使用十六进制代码手动排序因子和映射颜色,但我想要一些可以缩放并避免手动过程的东西。此外,如果有人对如何显示除散点图以外的此图有任何建议,我愿意接受建议。主要思想是检测颜色显示的趋势中完成时间的模式。由于是随机生成的数据,趋势可能不会显示,但这没关系。

最佳答案

我的同事在另一篇文章中找到了一个解决方案,该解决方案需要一个名为 ggnewscale 的附加包。我仍然不知道这是否只能使用 ggplot2 来完成,但这可行。不过,我仍然愿意接受其他绘图建议。目的是检测用户之间和用户内部完成日期的任何趋势。我希望跨用户看到更多趋势,但内部也可以提供信息。

How merge two different scale color gradient with ggplot

library(ggnewscale)

dat1 <- test_data %>% filter(task_group == 1)
dat2 <- test_data %>% filter(task_group == 2)
dat3 <- test_data %>% filter(task_group == 3)

ggplot(mapping = aes(x = days_completion, y = user)) +
  geom_point(data = dat1, aes(color = task_order)) +
  scale_color_gradientn(colors = c('#99000d', '#fee5d9')) +
  new_scale_color() +
  geom_point(data = dat2, aes(color = task_order)) +
  scale_color_gradientn(colors = c('#084594', '#4292c6')) +
  new_scale_color() +
  geom_point(data = dat3, aes(color = task_order)) +
  scale_color_gradientn(colors = c('#238b45'))

Example draft plot

关于R ggplot2 按组指定单独的颜色渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60764545/

相关文章:

r - Ubuntu-没有名为 shinydashboard 的软件包?

r - 如何在 ggplot2 中为分组线定义线图顺序?

r - 如何在 R 中使用折线图表示变量上的簇内的子簇

r - 是否可以仅从 R 中的 logLik 对象中提取对数似然值?

r - 在多面 ggplot 中自动勾选最大值和最小值

r - 修改 PlotSlope 输出(pequod 包)

r - ggplot,更改每个 "color"的 alpha

r - R 中的 Dictionary() 函数的问题

r - 如何在给定特定行顺序的情况下对 R data.table 中的行重新排序

r - 有时会出现加载 'dplyr' 的问题