R语言绘制山峦图

什么是山峦图?

山峦图(Mountain Plot)是一种数据可视化方法,用于展示多个不同组别之间的连续变量的分布情况。它以山峦的形状来表示数据的分布,通常由多个峰和谷构成。

在山峦图中,每个组别在 y 轴上对应一个位置,而连续变量的数值则在 x 轴上表示。通过堆叠多个山峦,可以直观地比较不同组或类别之间的分布情况。

常用于比较多个组的概率密度函数、频率分布或其他连续变量的分布情况。它能够显示出每个组的整体分布形态,并且可以清楚地看到峰值、谷值以及密度的变化。这种可视化方法能够帮助观察者直观地理解数据之间的差异和相似性。

如图所示,山峦形状的图案为核密度图,山峦图案上的三条竖线为分位数标记,山峦图案下方的竖线显示实时分布,类似抖动散点图。

绘图前的数据准备

这里直接使用ggridges包中的示例数据Aus_athletes。

用到了三列数据height,sex,sport。其中height是数值型连续变量,sex和sport为分类变量

rcc

wcc

hc

hg

ferr

bmi

ssf

pcBfat

lbm

height

weight

sex

sport

3.96

7.5

37.5

12.3

60

20.56

109.1

19.75

63.32

195.9

78.9

f

basketball

4.41

8.3

38.2

12.7

68

20.67

102.8

21.30

58.55

189.7

74.4

f

basketball

4.14

5.0

36.4

11.6

21

21.86

104.6

19.88

55.36

177.8

69.1

f

basketball

4.11

5.3

37.3

12.6

69

21.88

126.4

23.66

57.18

185.0

74.9

f

basketball

4.45

6.8

41.5

14.0

29

18.96

80.3

17.64

53.20

184.6

64.6

f

basketball

4.10

4.4

37.4

12.5

42

21.04

75.2

15.58

53.77

174.0

63.7

f

basketball

R语言绘制山峦图

# 代码来源:https://www.r2omics.cn/
# 加载包
library(ggplot2)
library(ggridges)  # 用来绘制山峦图

# 数据
# 直接使用ggridges包中的示例数据Aus_athletes。
  
# 使用ggplot2绘制高度分布图
ggplot(Aus_athletes, aes(x = height, y = sport, point_color = sex, fill = sex)) +  # 设置映射
  # 绘制密度曲线和点
  geom_density_ridges(
    scale = .95,                # 密度曲线的缩放因子
    rel_min_height = .01,       # 过滤低于该高度的密度曲线
    size = 0.25,                # 密度曲线的边缘线条宽度
    
    jittered_points = TRUE,     # 是否绘制点图
    point_shape = "|",          # 点的形状为竖线
    point_size = 3,             # 点的大小
    position = position_points_jitter(height = 0,width = 0),   # 点的位置进行偏移,这里设置偏移量为0
    
    quantile_lines = TRUE,          # 显示分位数线
    quantiles = c(0.25, 0.5,0.75)   # 分位数线的位置
  ) +
  # 设置填充颜色的手动缩放
  scale_fill_manual(values = c("#D55E00A0", "#0072B2A0")) +
  # 设置点颜色的手动缩放,并隐藏图例
  scale_discrete_manual("point_color", values = c("#D55E00A0", "#0072B2A0"), guide = "none") +
  # 设置坐标轴范围,不裁剪超出范围的元素
  coord_cartesian(clip = "off") +
  # 设置图例的外观
  guides(fill = guide_legend(
    override.aes = list(
      fill = c("#D55E00A0", "#0072B2A0"),   # 图例填充颜色
      color = NA,                           # 图例边框颜色
      point_color = NA                      # 图例点颜色
    )
  )) +
  theme_bw()