R可视化学习(5) -- 脊线图

简介: Ridgeline 图(脊线图),(有时称为Joyplot)可以同时显示几个组的数值分布情况,分布可以使用直方图或密度图来表示,它们都与相同的水平尺度对齐,并略有重叠。常常被用来可视化随时间或空间变化的多个分布/直方图变化。

安装包ggridges


# Cran安装
install.packages("ggridges")
# github上安装
library(devtools)
install_github("clauswilke/ggridges")

绘图

基础图形

主要利用geom_density_ridges函数


# library
library(ggridges)
library(ggplot2)
# Diamonds dataset is provided by R natively
#head(diamonds)
# basic example
ggplot(diamonds, aes(x = price, y = cut, fill = cut)) +
  geom_density_ridges(alpha = 0.5) +
  theme_ridges() + 
  theme(legend.position = "none")

d5a1e9d118e74c7a08144da9da2926d.png

基础图

另外,有时候我们也可分面展示不同范围的脊线图


diamonds$label= ifelse(diamonds$price >= 10000,'great','bad')
ggplot(diamonds, aes(x = price, y = cut, fill = cut)) +
  geom_density_ridges() +
  theme_ridges() + 
  theme(legend.position = "none")+
  facet_wrap(~label)

8586d24888ac2f840c794b8be95ed7a.png

不同范围分面展示

增加统计信息

这里利用到stat_density_ridges函数,可以在图形上增加代表统计信息的线段, 比如增加上 、下四分位数线(Q1 Q3)和中位数线 Q2 。


ggplot(diamonds, aes(x = price, y = cut, fill = cut)) +
  stat_density_ridges(quantile_lines = TRUE)+
  theme_ridges() + 
  theme(legend.position = "none")
# 当然,我们也可自定义分位数线 比如2.5% 和 60%的线
ggplot(diamonds, aes(x = price, y = cut, fill = cut)) +
  stat_density_ridges(quantile_lines = TRUE, quantiles = c(0.025, 0.600), alpha = 0.7)+
  theme_ridges() + 
  theme(legend.position = "none")

65a0e62b61f2f75ef9fb469de2f31d7.png

将上述代码中fill的映射值改为factor(stat(quantile)),可以将不同颜色映射在不同的分区,并自定义颜色,如:


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_manual(
    name = "Probability", values = c("#FF0000A0", "#A0A0A0A0", "#0000FFA0",'gold'),
    labels = c("(0, 0.025]", "(0.025, 0.050]","(0.050,0.075]", "(0.075, 1]")
  )

d01a18ee4dbdb9cd37bc82033445f79.png

按照范围分组

散点图显示

参考了,代码中设置jittered_points = TRUE来实现散点的绘制,无论是在stat_density_ridges还是在geom_density_ridges

点可以有以下几种选择方式:

  • position = 'sina',在基线和山脊线之间的山脊线图中随机分布点。 这是默认选项。
  • position= 'jitter', 随机抖动山脊线图中的点。 点随机上下移动和/或左右移动。
  • position = 'raincloud': 在山脊线图下方创建随机抖动点的云。


# 增加散点图
A <- ggplot(iris, aes(x = Sepal.Length, y = Species)) +
  geom_density_ridges(jittered_points = TRUE)
# 控制点位置
# position = "raincloud"
B <- ggplot(iris, aes(x = Sepal.Length, y = Species)) +
  geom_density_ridges(
    jittered_points = TRUE, position = "raincloud",
    alpha = 0.7, scale = 0.9
  )
# position = "points_jitter"
C <- ggplot(iris, aes(x = Sepal.Length, y = Species)) +
  geom_density_ridges(
    jittered_points = TRUE, position = "points_jitter",
    alpha = 0.7, scale = 0.9
  )
# 增加边际线
D <- 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,
  )
library(patchwork)
(A + B)/(C + D)+ plot_annotation(tag_levels = 'A')

69e98b81828318f38c1543d31c4105b.png

自定义散点的样式、颜色


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))

b0b2195d2f1e54c4ba817267be74c79.png

自定义

其它(渐变色)

除了上述比较单一的色彩,还可使用此包中geom_density_ridges_gradient函数添加渐变色,拿Example数据为例,可以通过?geom_density_ridges_gradient进行查看更多的控制参数,


# library
library(ggridges)
library(ggplot2)
library(viridis)
library(hrbrthemes)
# Plot
ggplot(lincoln_weather, aes(x = `Mean Temperature [F]`, y = `Month`, fill = ..x..)) +
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01) +
  scale_fill_viridis(name = "Temp. [F]", option = "C") +
  labs(title = 'Temperatures in Lincoln NE in 2016') +
  theme_ipsum() +
  theme(
    legend.position="none",
    panel.spacing = unit(0.1, "lines"),
    strip.text.x = element_text(size = 8)
  )
## geom_density_ridges_gradient参数很多,可以?详细查看
 geom_density_ridges_gradient(
  mapping = NULL,
  data = NULL,
  stat = "density_ridges",
  position = "points_sina",
  panel_scaling = TRUE,
  na.rm = TRUE,
  gradient_lwd = 0.5,
  show.legend = NA,
  inherit.aes = TRUE,
  ...
)

85d26bf1b3eecd0b51ec69af9ca1ef3.png

渐变色

直方图显示

除了上述的密度图,只需添加上stat=binline参数即可。


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

72985016f725045b80783accef6eac6.png

直方图

相关文章
|
6天前
|
并行计算 数据可视化 算法
CMplot & rMVP | 全基因组曼哈顿图和QQ图轻松可视化!
`CMplot`和`rMVP`是R语言中的两个包,用于全基因组关联分析(GWAS)的数据可视化。`CMplot`专注于曼哈顿图和QQ图的绘制,支持多种图表类型,如常见的SNP密度图、环状曼哈顿图、矩阵图、单条染色体图和多重曼哈顿图等。`rMVP`不仅包含了`CMplot`的功能,还支持更复杂的GWAS方法,如线性/混合线性模型和基因组选择算法,优化了内存管理和计算效率,特别适合大规模数据集。此外,它还提供PCA图和柱状图。两者都提供了丰富的参数定制图表。
16 1
CMplot & rMVP | 全基因组曼哈顿图和QQ图轻松可视化!
|
4月前
|
数据可视化
Tableau可视化设计案例-04标靶图、甘特图、瀑布图
Tableau可视化设计案例-04标靶图、甘特图、瀑布图
|
4月前
|
机器学习/深度学习
如何使用一行代码在一张图形上展示不同的模型
如何使用一行代码在一张图形上展示不同的模型
29 0
|
Web App开发 数据可视化 前端开发
前端数据可视化插件(四)关系图
前端数据可视化插件(四)关系图
前端数据可视化插件(四)关系图
|
10月前
|
数据可视化 数据处理
R可视化学习(4) -- 棒棒糖图
棒棒糖图其实类似于柱状图加散点图的效果,因为他的形状就是由俩部分组成(点+线条),因此在ggplot中,我们只要通过geom_point()函数绘制"糖"的那一部分,geom_segment()函数绘制“棒棒”那一部分,就可轻松绘制出这种图形
92 0
|
10月前
|
数据采集 数据可视化
|
10月前
|
移动开发 数据可视化 HTML5
R可视化学习—词云图
词云。又称文字云。“词云”就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出,它会过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
106 0
|
10月前
|
数据可视化 Go 数据库
DiVenn一款用于比较基因列表的交互式Venn图绘制工具
Divenn一种基于网络的基于Web的工具 Divenn 可以将来自多个RNA-seq实验中的基因列表进行比较,并显示每个基因(集)的调控水平和整合到Kegg pathway和GO term的数据信息。我们通过该工具更加方便的了解重叠基因与其相关的pathway或Go terms之间的表达模式,十分有趣。
131 0
|
11月前
|
数据采集 数据可视化 算法
数据分析可视化常用图介绍以及相关代码实现(箱型图、Q-Q图、Kde图、线性回归图、热力图)
数据分析可视化常用图介绍以及相关代码实现(箱型图、Q-Q图、Kde图、线性回归图、热力图)
|
11月前
|
机器学习/深度学习 算法 数据可视化
可视化图布局算法浅析
图算法在前端领域考察的较少,一般除非是要写框架或者打包工具对依赖关系处理(DAG)会用到,前端对图算法的考察一般是比较少的,而对于可视化领域而言,图又是必不可少的一种展示方式,其中对于边和节点的展示布局方案结合美学效果会有不同的算法实现,本文旨在介绍一些常见的通用布局算法,其中的每个小的布局方案也会有不同的分支实现
317 0

热门文章

最新文章