控制叠加线,而颜色是 ggplot 中的连续值

control overlaying lines while color is continuous value in ggplot

我有一个数据,想绘制线条并控制线条彼此叠加的顺序。

我想使用 'cale_color_viridis()' 作为我的托盘。我不知道如何在较暗的线上绘制较浅(黄色)线。

这是我的玩具数据框和我的代码:

toy_data <- data.frame(x = c(1,3,1,2,5,0), y = c(0, 01, 1, 0.6, 1, .7), 
                  col = rep(c("r", "b", "g"), each = 2), group = seq(0,1, by = 0.2))
ggplot(toy_data, aes(x = x, y = y, group = col, color = group)) +
geom_line(size = 2) +
scale_color_viridis()

知道我该怎么做吗?

group 美学决定绘图顺序,在本例中,col 变量是字符数据。它通常会按字母顺序 (b g r) 绘制,因此要让 col "g" 的黄线最后打印,您可以将其转换为按出现顺序排序的因子,例如 forcats::fct_inorder:

ggplot(toy_data, 
       aes(x = x, y = y, group = col %>% forcats::fct_inorder(), color = group)) +
  geom_line(size = 2) +
  scale_color_viridis_c()   # added in ggplot2 3.0 in July 2018. 
                            # scale_color_viridis for older ggplot2 versions

如果 col 是数字,你可以通过给你的“顶级”系列最大的数字来达到同样的目的。

toy_data2 <- data.frame(x = c(1,3,1,2,5,0), y = c(0, 01, 1, 0.6, 1, .7), 
                       col = rep(c(3, 1, 2), each = 2), group = seq(0,1, by = 0.2))

ggplot(toy_data2, 
       aes(x = x, y = y, group = if_else(col == 2, 1e10, col), color = group)) +
  geom_line(size = 2) +
  scale_color_viridis_c()