如何在曲线下创建水平渐变?

3

我正在尝试在R中重新创建以下绘图样式:

enter image description here

这些数据不需要以任何有意义的方式映射到渐变色中(虽然从技术上讲,它在某种程度上映射到x轴分类步骤,随着日期/月份的更改,颜色逐渐变化)。

我尝试了scale_colour_gradient()和scale_fill_gradient(),但没有成功。如果您能提供任何指导,我将不胜感激!

样本数据:

    views <- tribble(
      ~month, ~views,
      "Jan", 374,
      "Feb", 500,
      "Mar", 416,
      "Apr", 603,
      "May", 389,
      "Jun", 510) %>%
      transform(month = factor(month, levels=c("Jan","Feb","Mar","Apr","May","Jun")))

    views %>%
      ggplot(., aes(x = month, y = views, group=1)) +
      geom_line(color="red") +
      scale_y_continuous(breaks=seq(0, 1000, by = 200),
                             limits = c(0, 1000))

两个可能有用的链接 https://www.r-bloggers.com/2021/07/little-useless-useful-r-functions-colourful-ggplot-line-graphs/ - Yacine Hajji
1
https://dev59.com/AZffa4cB1Zd3GeqP2xUA - Yacine Hajji
请参考以下关于编程的内容:相关 https://dev59.com/xK_la4cB1Zd3GeqP0vGJ 和 https://dev59.com/gV4d5IYBdhLWcg3wDe30?noredirect=1&lq=1,以及 https://stackoverflow.com/questions/64691000/create-top-to-bottom-fade-gradient-geom-density-in-ggplot2 - tjebo
2个回答

3

通过在“多边形”上创建分段,您可以制作水平渐变-其下边界是x轴,上边界是连接线。关键是找到连接线的坐标-我用approx来近似(!)它们。

对于geom_line中的颜色渐变,您可以使用ggforce::geom_link2 - 令人方便的是,您可以为段和geom_link2使用相同的颜色比例尺。

library(tidyverse)
views <- tribble(
  ~month, ~views,
  "Jan", 374,
  "Feb", 500,
  "Mar", 416,
  "Apr", 603,
  "May", 389,
  "Jun", 510) %>%
  transform(month = factor(month, levels=c("Jan","Feb","Mar","Apr","May","Jun")))

foo <- data.frame(approx(1:6, views$views, n = 2000))

ggplot(views, aes(x = month, y = views, group=1)) +
  ggforce::geom_link2(aes(color = as.integer(month)), linewidth = 1) +
  geom_segment(data = foo, aes(x, xend = x, y = 0, yend = y, color = x), alpha = .5, linewidth = .1) +
  scale_color_gradientn(colours = c("#83DFEF", "#6F9EF2", "#815BF6")) +
  theme(legend.position = "none") 

使用 reprex v2.0.2 工具创建于2022年11月17日。


1
首先要感谢 @tjebo 提出了一种很好的分段方法。另一种使用 geom_line 的选项是先将月份转换为数字,然后您可以像这样在轴上将数字转换回月份:
# Data from tjebo 
foo <- data.frame(approx(1:6, views$views, n = 2000))

library(ggplot2)
library(dplyr)
views %>%
  mutate(month_dig = as.numeric(unclass(month))) %>%
  ggplot(.) +
  geom_segment(data = foo, aes(x, xend = x, y = 0, yend = y, color = x), alpha = .5, size = .1) +
  scale_colour_gradient(low = 'lightblue', high = 'purple') +
  geom_line(aes(x = month_dig, y = views, group=1, colour = month_dig)) +
  scale_x_continuous(breaks = seq(1,6,1), labels = month.abb[1:6]) +
  scale_y_continuous(breaks=seq(0, 1000, by = 200), limits = c(0, 1000)) +
  theme_bw() +
  labs(x = 'Month', y = 'Views', fill = 'Gradient')
#> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
#> ℹ Please use `linewidth` instead.

创建于2022年11月17日,使用reprex v2.0.2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接