R语言 | 峰峦图 / 山脊图

目的:为展示不同数据分布的差异。

1. ggplot2 实现

复制代码
# 准备数据
dat=mtcars[, c("mpg", "cyl")]
colnames(dat)=c("value", "type")
head(dat)
#                  value type
#Mazda RX4         21.0   6
#Mazda RX4 Wag     21.0   6
#Datsun 710        22.8   4

cols=c("#F71480", "#76069A", "#FF8000")
#
p1=ggplot(dat, aes(x = value, fill = as.factor(type) ) ) +
  geom_density(alpha = 0.8) +
  scale_fill_manual(values = cols)+
  facet_wrap(~type, ncol=1) +  # 按气缸数分面
  labs(title = "Density of MPG by Cylinder Count-A",
       x = "Miles Per Gallon (MPG)",
       y = "Density",
       fill = "Cylinders") +
  theme_classic(base_size = 14)+
  theme(strip.background = element_blank(),  # 去掉小标题背景
        strip.placement = "outside");p1  # 小标题外部显示
#
p2=ggplot(dat, aes(x = value, fill = as.factor(type) ) ) +
  geom_density(alpha = 0.8) +
  scale_fill_manual(values = cols)+
  facet_wrap(~type, ncol=1, scales="free_y") +  # 按气缸数分面
  labs(title = "Density of MPG by Cylinder Count-B",
       x = "Miles Per Gallon (MPG)",
       y = "Density",
       fill = "Cylinders") +
  theme_classic(base_size = 14)+
  theme(strip.background = element_blank(),  # 去掉小标题背景
        strip.placement = "outside"); p2  # 小标题外部显示
#

2. 使用R包 ggridges

图放这里,方便和上图类似。

复制代码
library(ggridges)
pB=ggplot(dat, aes(x = value, y = type, fill = factor(type, levels = c("4", "6", "8")) )) + 
  ggridges::geom_density_ridges(alpha = 0.7, show.legend = T) +
  scale_fill_manual(values = cols)+
  #scale_y_continuous( expand = c(0,0) )+
  labs(title = "Density of MPG by Cylinder Count-C",
       x = "Miles Per Gallon (MPG)",
       y = "Density",
       fill = "Cylinders") +
  theme_classic(base_size = 14); pB
#
pB2=ggplot(dat, aes(x = value, y = type, fill = factor(type, levels = c("4", "6", "8")) )) + 
  ggridges::geom_density_ridges(alpha = 0.7, show.legend = T, 
                                stat="binline", bins=25) +
  scale_fill_manual(values = cols)+
  #scale_y_continuous( expand = c(0,0) )+
  labs(title = "Density of MPG by Cylinder Count-D",
       x = "Miles Per Gallon (MPG)",
       y = "Density",
       fill = "Cylinders") +
  theme_classic(base_size = 14); pB2
#

3. 去掉底部的空隙

复制代码
pB3=ggplot(dat, aes(x = value, y = type, fill = factor(type, levels = c("4", "6", "8")) )) + 
  ggridges::geom_density_ridges(alpha = 0.7, show.legend = T, 
                                scale = 2) +
  scale_fill_manual(values = cols)+
  #scale_y_continuous( expand = c(0,0) )+
  labs(title = "Density of MPG by Cylinder Count-E\nset scale=2",
       x = "Miles Per Gallon (MPG)",
       y = "Density",
       fill = "Cylinders") +
  # 去掉底部
  scale_y_discrete(expand = c(0, 0)) +     # will generally have to set the `expand` option
  scale_x_continuous(expand = c(0, 0)) +   # for both axes to remove unneeded padding
  coord_cartesian(clip = "on") + # to avoid clipping of the very top of the top ridgeline
  theme_classic(base_size = 14); pB3

Ref

相关推荐
在下雨5995 分钟前
项目讲解1
开发语言·数据结构·c++·算法·单例模式
再努力"亿"点点8 分钟前
Sklearn(机器学习)实战:鸢尾花数据集处理技巧
开发语言·python
饭碗的彼岸one30 分钟前
C++ 并发编程:异步任务
c语言·开发语言·c++·后端·c·异步
OxYGC1 小时前
[玩转GoLang] 5分钟整合Gin / Gorm框架入门
开发语言·golang·gin
锐策1 小时前
Lua 核心知识点详解
开发语言·lua
kyle~2 小时前
C/C++---动态内存管理(new delete)
c语言·开发语言·c++
落日沉溺于海2 小时前
React From表单使用Formik和yup进行校验
开发语言·前端·javascript
鲸屿1953 小时前
python之socket网络编程
开发语言·网络·python
没有梦想的咸鱼185-1037-16633 小时前
基于R语言机器学习方法在生态经济学领域中的实践技术应用
开发语言·机器学习·数据分析·r语言
向上的车轮4 小时前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang