R语言绘制山脊图(也叫峰峦图、山峦图)

news2025/2/25 16:17:26

山脊图也叫也叫峰峦图、山峦图,主要是通过展示一个相同的X轴数据,可以是时间序列、基因数据等,对应不同的Y轴数据,清晰的展示不同数据见变量的关系。今天我们通过R语言来演示山脊图。需要使用到ggridges包,需要提前安装好。 我们先导入R包和数据

library(ggplot2)
library(ggridges)
library(foreign)
bc <- read.spss("E:/r/test/tree_car.sav",
                use.value.labels=F, to.data.frame=T) 
head(bc,6)
##    car age gender inccat ed marital
## 1 37.2  45      m      4  3       1
## 2 19.8  42      m      2  3       0
## 3 11.8  28      m      1  4       0
## 4 21.3  31      f      2  4       1
## 5 68.9  42      f      4  3       0
## 6 34.1  35      m      3  3       0

这是一个汽车销售数据(公众号回复:汽车销售,可以获得该数据),我们来看下数据,car就是汽车售价,age是年龄,gender是性别,inccat是收入,这里分成4个等级,ed是教育程度,这里分为5个等级,marital表示是否结婚.我们处理一下数据,把分类变量转换成因子,然后加上一个标签。

bc$ed<-factor(bc$ed,levels=c(1:5),labels=c("小学","初中","高中","大学","博士"))
bc$inccat<-factor(bc$inccat,levels=c(1:4),labels=c("低收入","中低收入","中等收入","富裕"))
bc$gender<-ifelse(bc$gender=="m",1,0)
bc$gender<-factor(bc$gender,levels = c(0,1),labels=c("女性","男性"))
bc$marital<-factor(bc$marital,levels = c(0,1),labels=c("未婚","已婚"))
head(bc,6)
##    car age gender   inccat   ed marital
## 1 37.2  45   男性     富裕 高中    已婚
## 2 19.8  42   男性 中低收入 高中    未婚
## 3 11.8  28   男性   低收入 大学    未婚
## 4 21.3  31   女性 中低收入 大学    已婚
## 5 68.9  42   女性     富裕 高中    未婚
## 6 34.1  35   男性 中等收入 高中    未婚

接下来开始绘图,ggridges包绘制山峦图有两个主要的函数,geom_density_ridges函数主要是用于分类的演示,geom_density_ridges_gradient用于渐变性的演示,主要是通过绘制密度函数图来表示。我们先来演示一下geom_density_ridges函数。 假设我们想了解不同教育阶段人群的购车价格分布,这里X就是汽车售价car,Y就是学历ed。我们先来画一个基础图形

ggplot(bc, aes(x = car, y = ed)) +
  geom_density_ridges() 
## Picking joint bandwidth of 5.11

在这里插入图片描述
在geom_density_ridges()函数中,我们设置rel_min_height=0.005可以删除尾部区域线条,scale控制山峰高度,gradient_lwd为设置坡度。

ggplot(bc, aes(x = car, y = ed)) +
  geom_density_ridges(scale = 2, rel_min_height = 0.01,gradient_lwd = 1.)
## Warning in geom_density_ridges(scale = 2, rel_min_height = 0.01, gradient_lwd =
## 1): Ignoring unknown parameters: `gradient_lwd`
## Picking joint bandwidth of 5.11

在这里插入图片描述
我们可以看到山峰明显增高了,尾部区域线条没有了。scale_x_continuous和scale_y_discrete函数可以控制图像和坐标轴的距离

ggplot(bc, aes(x = car, y = ed)) +
  geom_density_ridges(rel_min_height = 0.01)+
  scale_x_continuous(expand = c(0, 0)) +   #用于控制离坐标轴的距离
  scale_y_discrete(expand = c(0,0))  #用于控制离坐标轴的距离
## Picking joint bandwidth of 5.11

在这里插入图片描述
theme_ridges()函数用于控制背景,山脊图的主题设置,默认是14,grid = TRUE为有网格线

ggplot(bc, aes(x = car, y = ed)) +
  geom_density_ridges(rel_min_height = 0.005)+
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_x_continuous(expand = c(0.01, 0))+
  theme_ridges(font_size = 13, grid = TRUE)
## Picking joint bandwidth of 5.11

在这里插入图片描述
根据分类添加颜色,fill = ed

ggplot(bc, aes(x = car, y = ed,fill = ed)) +
  geom_density_ridges(rel_min_height = 0.005)+
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_x_continuous(expand = c(0.01, 0))+
  theme_ridges()+ theme()
## Picking joint bandwidth of 5.11

在这里插入图片描述
使用scale_fill_brewer(palette = 4),可以使用ggplot定制主体颜色,有多个主题

ggplot(bc, aes(x = car, y = ed,fill = ed)) +
  geom_density_ridges(rel_min_height = 0.005)+
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_x_continuous(expand = c(0.01, 0))+
  theme_ridges()+ theme()+
  scale_fill_brewer(palette = 4)
## Picking joint bandwidth of 5.11

在这里插入图片描述
添加标题和副标题

ggplot(bc, aes(x = car, y = ed,fill = ed)) +
  geom_density_ridges(rel_min_height = 0.005)+
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_x_continuous(expand = c(0.01, 0))+
  theme_ridges()+ theme()+
  scale_fill_brewer(palette = 4)+
    labs(
    title = '学历和购车价格关系',
    subtitle = '不同学历和购车价格关系'
  )
## Picking joint bandwidth of 5.11

在这里插入图片描述
假设我们想进一步知道结婚和没有结婚的不同教育购车区别

ggplot(bc, aes(x = car, y = ed,fill = paste(ed, marital))) +
  geom_density_ridges(alpha = .7, color = "white", from = 0, to = 100)+
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_x_continuous(expand = c(0.01, 0))+
  theme_ridges()+ theme()
## Picking joint bandwidth of 5.83

在这里插入图片描述
也可以切换其他主题

ggplot(bc, aes(x = car, y = ed,fill = paste(ed, marital))) +
  geom_density_ridges(rel_min_height = 0.005)+
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_x_continuous(expand = c(0.01, 0))+
  theme_ridges()+ theme()+
  scale_fill_brewer(palette = 4)+
  scale_fill_brewer(palette = 4)+
    labs(
    title = '学历和购车价格关系',
    subtitle = '不同学历和购车价格关系'
  )

在这里插入图片描述
接下来我们介绍一下geom_density_ridges_gradient函数,主要是渐变的效果,大部分参数相同,这里要选个fill = stat(x)进行转换。
为不同类型的学历机型渐变颜色, scale_fill_viridis_c函数 #name =为名字映射,alpha透明度,option = #“C”,不同颜色美学,A-H,direction,设置颜色在比例中的顺序,默认是1

ggplot(bc, aes(x = car, y = ed, fill = after_stat(x))) +
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01, gradient_lwd = 1.) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_discrete(expand = expand_scale(mult = c(0.01, 0.25))) +
  scale_fill_viridis_c(name = "学历", option = "C") +  
  labs(
    title = '学历和购车价格关系',
    subtitle = '不同学历和购车价格关系'
  )

在这里插入图片描述
这样就产生了一个渐变风格的山脊图,接下来option这里可以产生不同颜色美学,A-H,direction,设置颜色在比例中的顺序,默认是1,我们换一个看看

ggplot(bc, aes(x = car, y = ed, fill = after_stat(x))) +
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01, gradient_lwd = 1.) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_discrete(expand = expand_scale(mult = c(0.01, 0.25))) +
  scale_fill_viridis_c(name = "学历", option = "D") +  
  labs(
    title = '学历和购车价格关系',
    subtitle = '不同学历和购车价格关系')+
theme_ridges()+ theme()
## Picking joint bandwidth of 5.11

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive ---- 查询

Hive ---- 查询 1. 基础语法2. 基本查询&#xff08;Select…From&#xff09;1. 数据准备2. 全表和特定列查询3. 列别名4. Limit语句5. Where语句6. 关系运算函数7. 逻辑运算函数8. 聚合函数 3. 分组1. Group By语句2. Having语句 4. Join语句1. 等值Join2. 表的别名3. 内连接…

vue:el-table初始化表格选中项踩坑记录/element-ui表格

问题描述 首先&#xff0c;element-ui表格多选功能可以参考官网示例&#xff1a;表格数据多选&#xff1b;手动在表格中选取数据、通过监听selection-change获取选中项&#xff0c;实现起来非常顺利~ 但在保存了选项、重新加载表格时&#xff0c;希望将已选项“打勾”却完全没…

这篇文章告诉你excel批量翻译有什么方法

在商业或个人领域中&#xff0c;我们有时需要将大量文本翻译成不同语言&#xff0c;例如跨国企业需要在不同的国家和地区之间进行文件传输和协作&#xff0c;在旅行时我们需要阅读当地语言的信息或地图。如果我们手动操作的话&#xff0c;是非常耗时且容易出错的&#xff0c;所…

知识管理、文档管理两手抓,全靠它!

知识管理和文档管理是两个相互关联的概念&#xff0c;两者之间的关系非常密切。知识管理是指对组织内外的知识资源进行收集、整理、存储、共享和应用的过程&#xff0c;旨在提高组织的绩效和创新能力。而文档管理是指对组织内外的文档资源进行收集、整理、存储、共享和应用的过…

chatgpt赋能Python-python_heading__

Python heading()方法&#xff1a;提高网页的SEO效果 介绍 在网页开发过程中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;是一个重要的考虑因素。网页的排名和可见性对于用户的访问和广告收益非常重要。好的SEO可以大大提高网页的可见性和流量。因此&#xff0c;网页…

SolVES模型生态系统服务功能社会价值评估

查看原文>>>SolVES 模型生态系统服务功能社会价值评估&#xff08;基于多源环境QGIS、PostgreSQL、ArcGIS、Maxent、R语言&#xff09; 目录 第一章、理论基础与研究热点 第二章、SolVES 4.0 模型运行环境配置 第三章、SolVES 4.0 模型运行 第四章、数据获取与入…

【追梦之旅】— 堆的实际应用--TopK问题

【追梦之旅】— 堆的实际应用--TopK问题&#x1f60e; 前言&#x1f64c;堆的TopK问题的现实栗子堆的TopK思路的应用场景堆的TopK思路的具体实现fscanf函数fprintf函数堆的TopK具体实现代码&#xff1a;前K个数据的巧妙设置运行结果截图&#xff1a; 总结撒花&#x1f49e; &am…

chatgpt赋能Python-python_ip地址判断

Python IP地址判断 - 从入门到精通 如果您是一个开发人员并且经常需要处理网络相关的任务&#xff0c;那么您一定知道 IP 地址是什么。 IP 地址&#xff08;Internet Protocol Address&#xff09;&#xff0c;是网络中用于标识设备的唯一标识符。 在本篇文章中&#xff0c;您…

chatgpt赋能Python-python_iloc

Python iLoc的使用方法及其在数据处理中的应用 Python是一种灵活的编程语言&#xff0c;可以在数据科学领域中广泛应用。在数据处理中&#xff0c;许多人都熟悉Pandas数据框架。本篇文章将介绍Pandas中的iloc方法&#xff0c;以及如何在数据处理中使用它。 iloc方法是什么? …

基于html+css的图展示87

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

CryoEM - 冷冻电镜 CryoSPARC 单颗粒图像数据集构建

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130822537 CryoSPARC 的 downsample 操作是一种用于减少数据集大小的技术,可以提高计算效率和内存使用率。downsample 操作的原理是将原始图像的分辨率降低…

SpringBoot是如何简化配置的

Spring Boot 如何简化配置&#xff1f; Spring Boot 是一个基于 Spring 框架的快速开发框架&#xff0c;它可以大大简化应用程序的配置过程。本文将介绍 Spring Boot 是如何简化配置的&#xff0c;并提供相关的代码示例。 一、自动化配置 Spring Boot 的自动化配置功能可以根…

C++【实现AVL树】

文章目录 一、AVL树的概念及性能二、AVL树结点的创建三、AVL树的插入四、四种旋转&#xff08;1&#xff09;LL-左单旋&#xff08;2&#xff09;RR-右单旋&#xff08;3&#xff09;LR-左右旋&#xff08;4&#xff09;RL-右左旋 五、判断AVL树六、测试结果七、源代码(1) AVL_…

低代码开发平台魔笔 X 浙江广电集团:“10天”成为行业最小创新单位!

客户背景概述 浙江广播电视集团&#xff08;以下简称浙江台&#xff09;是一家以广播电视为主业,兼营相关产业的综合媒体集团&#xff0c;是国内最具影响力的省级媒体之一。因新业务拓展需要&#xff0c;浙江台也需随之上线一套全新的媒资平台系统进行运营支撑&#xff0c;而新…

2023年湖北助理工程师个人申报怎么申请?

这是许多出入职场的人&#xff0c;比较关心的话题&#xff0c;想要申请一个助理工程师怎么办呢&#xff1f;助理职称好不好办&#xff1f;助理工程师职称个人怎么申请呢&#xff1f;助理工程师申需要什么材料呢&#xff1f;助理工程师申报有什么流程呢&#xff1f;甘建二现在教…

五、数据仓库详细介绍(建模)实践篇

1 数仓建模在数仓建设过程中的位置 这张截图源自之前从 0 到 1 建设数据仓库的经验总结&#xff0c;采用的是瀑布模式的展现方式&#xff0c;但实际操作中经常会使用螺旋迭代模式&#xff0c;因为很难有人能够一步到位的考虑清楚所有细节。 通过业务调研我们熟悉了相关业务过程…

手把手教你用Python编写邮箱脚本引擎

版权声明&#xff1a;原创不易&#xff0c;本文禁止抄袭、转载需附上链接&#xff0c;侵权必究&#xff01; 目录 一、邮箱知识点简介二、常见邮箱开启SMTP服务2.1 QQ邮箱​2.2 163邮箱2.3 阿里云邮箱&#xff08;企业版&#xff09;2.4 Gmail邮箱 三、Python编写邮箱引擎3.1 编…

Deferred Components-实现Flutter运行时动态下发Dart代码 | 京东云技术团队

导读 Deferred Components&#xff0c;官方实现的Flutter代码动态下发的方案。本文主要介绍官方方案的实现细节&#xff0c;探索在国内环境下使用Deferred Components&#xff0c;并且实现了最小验证demo。读罢本文&#xff0c;你就可以实现Dart文件级别代码的动态下发。 一、…

蓝精灵协会启动第二阶段的 NFT 连续发售活动

四个月前&#xff0c;蓝精灵协会推出了一款完全上链的 NFT 游戏&#xff0c;参与的钱包数量超过 85,000 个&#xff0c;并进入了前 100 Dapps 排名&#xff0c;成为了 Web3 领域的一匹黑马。 两周前&#xff0c;我们开始了第二阶段的连续销售活动&#xff0c;旨在建立一个前沿 …

privateGPT centos7环境下部署和研究

gihtub代码 https://github.com/imartinez/privateGPT 安装 llama-cpp-python-0.1.48安装报错 Could not build wheels for llama-cpp-python, , which is required to install pyproject.toml-based projects搜索&#xff08;结果较少&#xff09;&#xff1a; 从文章&#…