美文网首页R ggplotR
R 数据可视化 —— ggplot 面积图

R 数据可视化 —— ggplot 面积图

作者: 名本无名 | 来源:发表于2021-04-15 21:06 被阅读0次

前言

面积图是在折线图的基础上形成的,它将线段与坐标轴之间的区域用颜色或条纹来填充,以凸显数据的变换趋势。

x 轴作为绘制方向,可以使用 geom_ribbon() 函数来绘制一个指定 y 轴区域(即设置 yminymax 参数)的图形

使用 geom_area() 绘制线条与 x 轴之间的范围(即 ymin=0, ymax=y

如果以 y 轴作为绘制方向,那么相应的范围参数则变为 xminxmax

示例

单数据面积图

df <- tibble(x = sample(30:50, 20), y = sample(1:20, 20))

p1 <- ggplot(df, aes(x, y)) +
  geom_line() +
  geom_area(fill = 'blue', alpha = 0.5)

p2 <- ggplot(df, aes(x, y)) +
  geom_line() +
  geom_ribbon(aes(ymin = y - 1, ymax = y + 1), fill = 'lightgreen', alpha = 0.5)

p3 <- ggplot(df, aes(x, y)) +
  geom_line(orientation = 'y') +
  geom_area(fill = 'blue', alpha = 0.5, orientation = 'y')

p4 <- ggplot(df, aes(x, y)) +
  geom_line(orientation = 'y') +
  geom_ribbon(aes(xmin = x - 1, xmax = x + 1), orientation = 'y',
              fill = 'lightgreen', alpha = 0.5)

plot_grid(p1, p2, p3, p4)

多数据堆积和百分比面积图

p <- subset(economics_long, variable %in% c("pce", "unemploy")) %>%
  ggplot(aes(x = date))

p1 <- p + geom_area(aes(y = value01, fill = variable), alpha = 0.4, position = 'stack')

p2 <- p + geom_area(aes(y = value01, fill = variable), alpha = 0.4, position = 'fill')

plot_grid(p1, p2)

绘制两条曲线之间的区域面积

p <- subset(economics_long, variable %in% c("pce", "unemploy")) %>%
  select(c(date, variable, value01)) %>%
  pivot_wider(names_from = variable, values_from = value01) %>%
  ggplot(aes(x = date)) + 
  geom_ribbon(aes(ymin = if_else(pce > unemploy, unemploy, pce), 
                    ymax = if_else(pce > unemploy, pce, unemploy)),
                fill = "#decbe4", colour = "black")
p

但有时候,我们可能想要区分两条曲线大小关系,体现在图形上就是,曲线 1 大于曲线二的区域设置为一种颜色,曲线 1 小于曲线 2 的区域设置为另一种不同的颜色

p + geom_ribbon(aes(ymin = pmin(unemploy, pce), 
                    ymax = pmax(pce, unemploy),
                    fill = pce > unemploy,
                    colour = pce > unemploy),
                show.legend = FALSE, na.rm = TRUE) +
  scale_fill_manual(values = c("#8dd3c7", "#fdb462"))

但是,从图上我们看到,不同的区域之间会有粘连,那怎么去除这些粘连呢?

我的解决办法是,将两种区域分开绘制,在绘制某一种区域时,将相反区域的值都设置为 NA

df <- subset(economics_long, variable %in% c("pce", "unemploy")) %>%
  select(c(date, variable, value01)) %>%
  pivot_wider(names_from = variable, values_from = value01) %>%
  mutate(low_min = pmin(pce, unemploy), low_max = pmax(pce, unemploy),
         high_min = low_min, high_max = low_max)

df$low_min[df$pce > df$unemploy] = NA
df$low_max[df$pce > df$unemploy] = NA

df$high_min[df$pce <= df$unemploy] = NA
df$high_max[df$pce <= df$unemploy] = NA

ggplot(df, aes(x = date)) +
  geom_ribbon(aes(ymin = low_min, ymax = low_max), 
              fill = "#8dd3c7", alpha = 0.7) +
  geom_ribbon(aes(ymin = high_min, ymax = high_max), 
              fill = "#fdb462", alpha = 0.7) +
  geom_line(aes(y = pce), colour = "#fb8072", size = .75) + 
  geom_line(aes(y = unemploy), colour = "#80b1d3", size = .75)

好了,问题解决。

相关文章

  • 03-08

    06 R语言作图 图就是数据,数据就是图 常用可视化R包 作图:base,ggplot2, ggpubr;拼图:p...

  • ggplot2优雅的绘制华夫图

    R包安装与加载 数据清洗 数据可视化 ggplot2版华夫图

  • R 数据可视化 —— ggplot 面积图

    前言 面积图是在折线图的基础上形成的,它将线段与坐标轴之间的区域用颜色或条纹来填充,以凸显数据的变换趋势。 以 x...

  • 生物统计-数据可视化

    可视化工具:R包,ggplot,ggplot2,两种可视化变量:类别型、定量型。饼图、柱状图。条形图、散点图、箱线...

  • 2020-05-27

    数据可视化以下R包用于数据可视化: ggplot2及其扩展:ggplot2包提供了一个强大的绘图系统,并实现了以下...

  • ggplot2学习(五)

    ggplot2基础(5)——配色与图例 参考《R数据可视化手册》、《R绘图:一文了解ggplot2颜色的设置[ht...

  • 【ggplot2绘图一:ggplot2原理】

    2021.4.23持续更新中。。。 参考:《R语言数据可视化之美》、《ggplot2:数据分析与图形艺术》、《R数...

  • 2018-07-23 R for data science之使用

    查看mpg数据结构 简单可视化 ggplot2画图结构 Exercises Run ggplot(data = m...

  • R 数据可视化(一)

    R 数据可视化 —— ggplot 基础介绍 前言 讲完数据处理,就要开始将数据可视化了。 在这一部分,我们主要的...

  • ggpubr:快速绘制用于发表的图形

    更好的阅读体验-->> ggplot2 (Hadley Wickham开发)是目前R语言数据可视化的主流。与R的基...

网友评论

    本文标题:R 数据可视化 —— ggplot 面积图

    本文链接:https://www.haomeiwen.com/subject/nuvdlltx.html