上次可视化系列说了瀑布图。它可以用于展示拥有相同的X轴变量数据(如相同的时间序列)、不同的Y轴离散型变量(如不同的类别变量)和Z轴数值变量。

本节使用的峰峦图也可以很好地展示瀑布图的数据信息。它们对于可视化随时间或空间分布的变化非常有用。本节主要使用ggridges包中的geom_density_ridges()进行绘制峰峦图。详细介绍如下:

1.数据结构

这里使用base包中的diamonds数据集做例子。

# library
library(ggridges) # Ridgeline Plots in 'ggplot2', CRAN v0.5.2
library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphics, CRAN v3.3.2
head(diamonds)

2.绘图教程

2.1基础版本

使用price作为x轴, cut为y轴,fill参数也是设定为cutgeom_density_ridges()内部全部使用默认参数,并使用了gridges包中theme_ridges()主题。

ggplot(diamonds, aes(x = price, y = cut, fill = cut)) +geom_density_ridges() +theme_ridges() + theme(legend.position = "none")

2.2形状变化

如果不想绘制密度图,则可以使用stat="binline", bins=20绘制柱形图,其中bins=20表示每格格子大小。为了防止上下图片重叠,这里使用了透明度参数:alpha=0.7

ggplot(diamonds, aes(x = price, y = cut, fill = cut)) +geom_density_ridges(alpha=0.7, stat="binline", bins=20) +theme_ridges() + theme(legend.position = "none")

2.3根据第三变量进行分面

可以使用facet_wrap()进行分面处理。

ggplot(diamonds, aes(x = price, y = cut,fill = cut)) +geom_density_ridges(alpha=0.7) +facet_wrap(~color) + theme_ridges() + theme(legend.position = "none")

在这里插入图片描述

2.4加入统计量

设置选项quantile_lines = TRUE,可以使stat_density_ridges计算指示分位数的线的位置。 默认情况下,绘制了三行,分别对应于第一,第二和第三四分位数:

ggplot(diamonds, aes(x = price, y = cut,fill = cut)) +geom_density_ridges(alpha=0.7,quantile_lines = TRUE) +theme_ridges() + theme(legend.position = "none")

注意quantiles=2意味着在两个分位数之间的边界上有一条线(即中位数)。

我们还可以通过切点而不是数字来指定分位数。例如,我们可以指出2.5%和97.5%(quantiles = c(0.025, 0.975))

ggplot(diamonds, aes(x = price, y = cut,fill = cut)) +geom_density_ridges(alpha=0.7,quantile_lines = TRUE,quantiles = c(0.025, 0.975)) +theme_ridges() + theme(legend.position = "none")

使用stat_density_ridges,计算stat(quantile),通过分位数进行着色。 注意,仅当calc_ecdf = TRUE时才能计算。

ggplot(diamonds, aes(x = price, y = cut,fill = factor(stat(quantile)))) +stat_density_ridges(geom = "density_ridges_gradient", calc_ecdf = TRUE,quantiles = 4, quantile_lines = TRUE) +theme_ridges() +scale_fill_viridis_d(name = "Quartiles")

我们可以使用相同的方法来突出分布的尾部。

ggplot(diamonds, aes(x = price, y = cut,fill = factor(stat(quantile)))) +stat_density_ridges(geom = "density_ridges_gradient", calc_ecdf = TRUE,quantiles = c(0.025, 0.975)) +theme_ridges() +scale_fill_manual(name = "Probability", values = c("#FF0000A0", "#A0A0A0A0", "#0000FFA0"),labels = c("(0, 0.025]", "(0.025, 0.975]", "(0.975, 1]"))

最后,当calc_ecdf = TRUE时,我们还可以计算stat(ecdf),它表示该分布的经验累积密度函数。 我们将其概率直接映射到颜色上。

ggplot(diamonds, aes(x = price, y = cut,fill = 0.5 - abs(0.5 - stat(ecdf)))) +stat_density_ridges(geom = "density_ridges_gradient", calc_ecdf = TRUE) +scale_fill_viridis_c(name = "Tail probability", direction = -1)

2.5加入抖动点

stat_density_ridges()还提供了可视化生成分布的原始数据点的选项。可以通过设置jittered_points = TRUE实现。为了简单起见,我们这里使用iris数据集。

ggplot(iris, aes(x = Sepal.Length, y = Species)) +geom_density_ridges(jittered_points = TRUE)+theme_ridges() + theme(legend.position = "none")

当然可以将其放在密度函数的下方,通过使用position = "raincloud"参数。

ggplot(iris, aes(x = Sepal.Length, y = Species)) +geom_density_ridges(jittered_points = TRUE, position = "raincloud",alpha = 0.7, scale = 0.9)

我们还可以模拟地毯形式:

ggplot(iris, aes(x = Sepal.Length, y = Species)) +geom_density_ridges(jittered_points = TRUE,position = position_points_jitter(width = 0.05, height = 0),point_shape = '|', point_size = 3, point_alpha = 1, alpha = 0.7,)

可以使用ggridges提供的特殊比例来设置抖动点的样式。 scale_discrete_manual()可用于制作具有任意形状和比例的图形。

ggplot(iris, aes(x = Sepal.Length, y = Species, fill = Species)) +geom_density_ridges(aes(point_color = Species, point_fill = Species, point_shape = Species),alpha = .2, point_alpha = 1, jittered_points = TRUE) +scale_point_color_hue(l = 40) +scale_discrete_manual(aesthetics = "point_shape", values = c(21, 22, 23))

如果你还想再加入一个变量进行可视化,可以在geom_density_ridges()加入。

ggplot(iris, aes(x = Sepal.Length, y = Species, fill = Species)) +geom_density_ridges(aes(point_shape = Species, point_fill = Species, point_size = Petal.Length), alpha = .2, point_alpha = 1, jittered_points = TRUE) +scale_point_color_hue(l = 40) + scale_point_size_continuous(range = c(0.5, 4)) +scale_discrete_manual(aesthetics = "point_shape", values = c(21, 22, 23))

另外一种有趣的可视化是通过vline_xxx构造以下图形。

ggplot(iris, aes(x = Sepal.Length, y = Species)) +geom_density_ridges(jittered_points = TRUE, quantile_lines = TRUE, scale = 0.9, alpha = 0.7,vline_size = 1, vline_color = "red",point_size = 0.4, point_alpha = 1,position = position_raincloud(adjust_vlines = TRUE))

其他资料

对于该包的其他有趣函数与可视化可参考以下资料:

  • Introduction to ggridges

  • RDocumentation-ggridges

  • Basic ridgeline plot

ggridges包—峰峦图详细介绍相关推荐

  1. 喷雾干燥机设计计算机软件,喷雾干燥机的干燥塔原理与设计架构图详细介绍

    历经长期的积累沉定,百度搜索针对喷雾干燥设备而言,很多年的制造工作经验在各个领域常有了非常好的发展,喷雾干燥设备也得到了大家较多的认同,大家针对喷雾干燥设备也大量的应用于各行各业,应对不一样的制造行业 ...

  2. 数据结构 图-详细介绍

    图的基本定义和术语 一.图的定义 图是由顶点的非空有穷集合(用V表示该集合)与顶点之间的关系(边或弧)的集合(用E表示该集合)构成的结构. 可以形式化表示为G=(V,E) 其中,V为顶点的非空有穷集合 ...

  3. IDEA的UML图详细介绍(二)

    统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...

  4. echarts堆叠柱状图加折线图详细介绍

    先介绍一下成品图 这个图形主要就是采用echarts,直接上代码. <!DOCTYPE html> <html> <head><meta charset=&q ...

  5. UML图:类图 --详细介绍

    类图的概念 描述类.接口及它们之间关系的图,显示系统中各个类的静态结构 类图的元素 类 面向对象系统组织结构的核心 对一组具有相同属性.操作.关系和语义的对象的抽象 包括名称部分(Name).属性部分 ...

  6. UML图:活动图详细介绍

    活动图简介 什么是活动图(Activity Diagram) 活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流,活动图在本质上是一种流程图: ...

  7. SQL 左外连接,右外连接,全连接,内连接带图详细介绍

    SELECT id, name,description,img_url,sort,is_display ​ from bbs_brand ORDER BY id DESC ​ limit startR ...

  8. 手把手教你Python如何抓包~【异常详细版】

    嗨害大家好鸭!我是小熊猫❤ 很多小伙伴在后台问我: 数据来源怎么找啊,怎么抓包? 其实很简单,多操作几遍就记住啦~ ~- 今天咱们通过三个案例来展示一下 有什么python相关报错解答自己不会的.或者 ...

  9. 猿创征文|【JavaSE】Map集合详细介绍

    目录 Map集合 概述 结构继承图 继承图详细介绍 Map接口中常用方法 put方法 remove方法 get方法 containsKey方法 Map集合两种遍历方式[重点] 键找值方式 键值对方式 ...

最新文章

  1. 京东运营插件_技术中台产品经理必知的那些易混词儿(1):组件、套件、 中间件、插件……...
  2. 在鱼眼和全向视图图像的深度学习方法
  3. killall 后面信号_五个你可能不了解的killall选项
  4. 弹出ALV的几种方法(ALV POPUP)
  5. Java设计模式-工厂模式(2)工厂方法模式
  6. h.264 rtp打包
  7. leetcode 148. 排序链表(归并排序)
  8. php sqlite id自增,Android sqlite设置主键自增长的方法教程
  9. CSS 背景 background属性
  10. c语言:使用main函数的参数,实现一个整数计算器
  11. 5G 和 IoT 究竟意味着什么?
  12. 古田县争取高速公路的历程
  13. HDU 3996 Gold Mine【最大闭合权图】
  14. 开发人员的U盘,最好是128G
  15. windows server 2003 系统提权
  16. 人体计算机原理,人体静力学
  17. 五个了解自己天赋优势的分析工具(二)盖洛普优势测评
  18. c++动态规划解决一系列数中互不相邻数字之和的最大值
  19. 【Linux】Rsync基于SSH认证的使用(rsync 命令属于1 v 4 的命令、rsync常用参数基本用法)
  20. java 随机发牌_java实现扑克牌发牌器

热门文章

  1. centos内核是linux吗,CentOS各版本的内核版本分别是什么?
  2. 【Android-Kotlin】匿名内部类与Lambda 表达式(附RecycleView监听)
  3. 【Vue.JS】纯 Vue.js 制作甘特图
  4. html格式错误检测,HTML格式错误
  5. 2018年高德地图POI全国数据下载
  6. vba html 转化为 xlsx,使用VBA批量转换Excel格式,由.xls转换成.xlsx
  7. Android获取根目录
  8. gitlab 配置QQ邮箱
  9. 软件设计模式--软件设计演变过程
  10. java多态的多种表现形式