[R语言]数据可视化包ggplot2教程及实例

前言

ggplot是一个拥有一套完备语法且容易上手的绘图系统,在PythonR中都能引入并使用,在数据分析可视化领域拥有极为广泛的应用。本篇从R的角度介绍如何使用ggplot2包,首先给几个我觉得最值得推荐的理由:

  • 采用“图层”叠加的设计方式,一方面可以增加不同的图之间的联系,另一方面也有利于学习和理解该packagephotoshop的老玩家应该比较能理解这个带来的巨大便利
  • 适用范围广,拥有详尽的文档,通过?和对应的函数即可在R中找到函数说明文档和对应的实例
  • RPython中均可使用,降低两门语言之间互相过度的学习成本

基本概念

本文采用ggplot2的自带数据集diamonds

> head(diamonds)
# A tibble: 6 x 10carat cut       color clarity depth table price     x     y     z<dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23  Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
2 0.21  Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
3 0.23  Good      E     VS1      56.9    65   327  4.05  4.07  2.31
4 0.290 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
5 0.31  Good      J     SI2      63.3    58   335  4.34  4.35  2.75
6 0.24  Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48# 变量含义
price  : price in US dollars (\$326–\$18,823)
carat  : weight of the diamond (0.2–5.01)
cut    :   quality of the cut (Fair, Good, Very Good, Premium, Ideal)
color  : diamond colour, from D (best) to J (worst)
clarity: a measurement of how clear the diamond is (I1 (worst), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (best))
x      : length in mm (0–10.74)
y      : width in mm (0–58.9)
z      : depth in mm (0–31.8)
depth  : total depth percentage = z / mean(x, y) = 2 * z / (x + y) (43–79)
table  : width of top of diamond relative to widest point (43–95)

基于图层和画布的概念,ggplot2引申出如下的语法框架:

图源:https://mp.weixin.qq.com/s/uskZWGAwfK9BVqLBQIXpGA

  • data:数据源,一般是data.frame结构,否则会被转化为该结构
  • 个性映射与共性映射:ggplot()中的mapping = aes()参数属于共性映射,会被之后的geom_xxx()stat_xxx()所继承,而geom_xxx()stat_xxx()中的映射参数属于个性映射,仅作用于内部
  • mapping:映射,包括颜色类型映射color;fill、形状类型映射linetype;size;shape和位置类型映射x,y
  • geom_xxx:几何对象,常见的包括点图、折线图、柱形图和直方图等,也包括辅助绘制的曲线、斜线、水平线、竖线和文本等
  • aesthetic attributes:图形参数,包括colour;size;hape
  • facetting:分面,将数据集划分为多个子集subset,然后对于每个子集都绘制相同的图表
  • theme:指定图表的主题
ggplot(data = NALL, mapping = aes(x = , y = )) +   # 数据集geom_xxx()|stat_xxx() +       # 几何图层/统计变换coord_xxx() +  # 坐标变换, 默认笛卡尔坐标系     scale_xxx() +  # 标度调整, 调整具体的标度  facet_xxx() +  # 分面, 将其中一个变量进行分面变换  guides() +     # 图例调整theme()        # 主题系统

这些概念可以等看完全文再回过头看,相当于一个汇总,这些概念都掌握了基本ggplot2的核心逻辑也就理解了

一些核心概念的含义可以从RStudio官方的cheat sheet图中大致得知:

一些栗子

通过实例和RCode从浅到深介绍ggplot2的语法。

1. 五脏俱全的散点图

library(ggplot2)# 表明我们使用diamonds数据集, 
ggplot(diamonds) + # 绘制散点图: 横坐标x为depth, 纵坐标y为price, 点的颜色通过color列区分,alpha透明度,size点大小,shape形状(实心正方形),stroke点边框的宽度geom_point(aes(x = carat, y = price, colour = color), alpha=0.7, size=1.0, shape=15, stroke=1) +# 添加拟合线geom_smooth(aes(x = carat, y = price), method = 'glm') +# 添加水平线geom_hline(yintercept = 0, size = 1, linetype = "dotted", color = "black") +# 添加垂直线geom_vline(xintercept = 3, size = 1, linetype = "dotted", color = "black") +# 添加坐标轴与图像标题labs(title = "Diamonds Point Plot", x = "Carat", y = "Price") +# 调整坐标轴的显示范围coord_cartesian(xlim = c(0, 3), ylim = c(0, 20000)) +# 更换主题, 这个主题比较简洁, 也可以在ggthemes包中获取其他主题theme_linedraw()

2. 自定义图片布局&多种几何绘图

library(gridExtra)
#建立数据集
df <- data.frame(x = c(3, 1, 5),y = c(2, 4, 6),label = c("a","b","c")
)  p <- ggplot(df, aes(x, y, label = label)) +# 去掉横坐标信息labs(x = NULL, y = NULL) +# 切换主题theme_linedraw()p1 <- p + geom_point() + ggtitle("point")
p2 <- p + geom_text() + ggtitle("text")
p3 <- p + geom_bar(stat = "identity") + ggtitle("bar")
p4 <- p + geom_tile() + ggtitle("raster")
p5 <- p + geom_line() + ggtitle("line")
p6 <- p + geom_area() + ggtitle("area")
p7 <- p + geom_path() + ggtitle("path")
p8 <- p + geom_polygon() + ggtitle("polygon")# 构造ggplot图片列表
plots <- list(p1, p2, p3, p4, p5, p6, p7, p8)
# 自定义图片布局
gridExtra::grid.arrange(grobs = plots, ncol = 4)

3. 箱线图

统计学中展示数据分散情况的直观图形,在探索性分析中常常用于展示在某个因子型变量下因变量的分散程度。

下面展示箱线图最长使用的一些方法:

library(ggplot2) # 绘图
library(ggsci)   # 使用配色# 使用diamonds数据框, 分类变量为cut, 目标变量为depth
p <- ggplot(diamonds, aes(x = cut, y = carat)) +theme_linedraw()# 一个因子型变量时, 直接用颜色区分不同类别, 后面表示将图例设置在右上角
p1 <- p + geom_boxplot(aes(fill = cut)) + theme(legend.position = "None")
# 两个因子型变量时, 可以将其中一个因子型变量设为x, 将另一个因子型变量设为用图例颜色区分
p2 <- p + geom_boxplot(aes(fill = color)) + theme(legend.position = "None")
# 将箱线图进行转置
p3 <- p + geom_boxplot(aes(fill = cut)) + coord_flip() + theme(legend.position = "None")
# 使用现成的配色方案: 包括scale_fill_jama(), scale_fill_nejm(), scale_fill_lancet(), scale_fill_brewer()(蓝色系)
p4 <- p + geom_boxplot(aes(fill = cut)) + scale_fill_brewer() + theme(legend.position = "None")# 构造ggplot图片列表
plots <- list(p1, p2, p3, p4)
# 自定义图片布局
gridExtra::grid.arrange(grobs = plots, ncol = 2)

当研究某个连续型变量的箱线图涉及多个离散型分类变量时,我们常使用分面facetting来提高图表的可视性。

library(ggplot2)ggplot(diamonds, aes(x = color, y = carat)) +# 切换主题theme_linedraw() +# 箱线图颜色根据因子型变量color填色geom_boxplot(aes(fill = color)) +# 分面: 本质上是将数据框按照因子型变量color类划分为多个子数据集subset, 在每个子数据集上绘制相同的箱线图# 注意一般都要加scales="free", 否则子数据集数据尺度相差较大时会被拉扯开facet_wrap(~cut, scales="free")

4. 直方图

library(ggplo2)# 普通的直方图
p1 <- ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut)) + theme_linedraw() +scale_fill_brewer()# 堆积直方图
p2 <- ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "identity") + theme_linedraw() +scale_fill_brewer()# 累积直方图
p3 <- ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "fill") + theme_linedraw() +scale_fill_brewer()# 分类直方图
p4 <- ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge") + theme_linedraw() +scale_fill_brewer()# 构造ggplot图片列表
plots <- list(p1, p2, p3, p4)
# 自定义图片布局
gridExtra::grid.arrange(grobs = plots, ncol = 2)

5. 坐标系统

除了前面箱线图使用的coord_flip()方法实现了坐标轴转置,ggplot还提供了很多和坐标系统相关的功能。

library(ggplot2)bar <- ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut), show.legend = FALSE, width = 1) + # 指定比率: 长宽比为1, 便于展示图形theme(aspect.ratio = 1) +scale_fill_brewer() +labs(x = NULL, y = NULL)# 坐标轴转置
bar1 <- bar + coord_flip()
# 绘制极坐标
bar2 <- bar + coord_polar()# 构造ggplot图片列表
plots <- list(bar1, bar2)
# 自定义图片布局
gridExtra::grid.arrange(grobs = plots, ncol = 2)

6. 瓦片图、 热力图

机器学习中探索性分析我们可以通过corrplot直接绘制所有变量的相关系数图,用于判断总体的相关系数情况。

library(corrplot)
#计算数据集的相关系数矩阵并可视化
mycor = cor(mtcars)
corrplot(mycor, tl.col = "black")

ggplot提供了更加个性化的瓦片图绘制:

library(RColorBrewer)
# 生成相关系数矩阵
corr <- round(cor(mtcars), 2)
df <- reshape2::melt(corr)
p1 <- ggplot(df, aes(x = Var1, y = Var2, fill = value, label = value)) +geom_tile() +theme_bw() +geom_text(aes(label = value, size = 0.3), color = "white") +labs(title = "mtcars - Correlation plot") +theme(text = element_text(size = 10), legend.position = "none", aspect.ratio = 1)
p2 <- p1 + scale_fill_distiller(palette = "Reds")
p3 <- p1 + scale_fill_gradient2()
gridExtra::grid.arrange(p1, p2, p3, ncol=3)

更多例子

有经典的50个ggplot2绘图示例:

http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html

其他文章

1. 机器学习必知必会与算法原理

机器学习导论:什么是机器学习
机器学习必知必会:凸优化
深入浅出机器学习算法:XGBoost
机器学习必知必会:梯度下降法

2. 数据分析和爬虫案例

Python数据分析:谁是2018当之无愧的“第一”国产电影
如何用python爬虫实现简单PV刷量——以CSDN为例
python脚本从零到一构建自己的免费代理IP池

3. 相关经验

秋招面试:零基础拿到腾讯数据岗offer需要做哪些努力
股票市场中如何用数据思维跑赢九成的投资者
精算师证有多难考,怎么准备?

Reference

[1] https://ggplot2-book.org/introduction.html#welcome-to-ggplot2
[2] https://rstudio.com/resources/cheatsheets/
[3] https://r4ds.had.co.nz/data-visualisation.html
[4] https://www.sohu.com/a/320024110_718302

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言中强大的作图软件包ggplot2

R语言两大底层绘图系统 grid 图形系统可以很容易地控制图形基础单元&#xff0c;给予编程者创作图形极大的灵活性。grid 图形系 统还可以产生可编辑的图形组件&#xff0c;这些图形组件可以被复用和重组&#xff0c;并能通过 grid.layout()等函数&#xff0c; 把图形输出到指定…

R语言绘图之ggplot2包

6月份一直在忙期末考试&#xff0c;今天来迅速的学习下ggplot2包的简单绘图。 R的基础包里面也有很多画图函数&#xff0c;例如plot();barplot();qqplot(); 但是还有大名鼎鼎的ggplot2包&#xff0c;用这个包的函数画出的图比较漂亮&#xff0c;而且使用灵活。 在ggplot的官…

数据分析——R语言中ggplot2用法(1)

备忘录地址&#xff08;用来查询一些参数&#xff09; https://www.maths.usyd.edu.au/u/UG/SM/STAT3022/r/current/Misc/data-visualization-2.1.pdf R语言软件参数 R3.6.0 安装包、导入包 install.package(ggplot) library(ggplot)首先加载数据集 这里用的是示例数据&am…

R语言:ggplot2包详解及各类精美图形绘制

文章目录 1.1 Ggplot2介绍1.2 Ggplot2特点默认值迭代高级元素 1.3 Ggplot2映射组件layerScalecoordtheme 1.4 Ggplot2自带数据集1.5 Ggplot2组成部分1.6 美观性参数1.7 多子图绘制1.8 图形类型与函数1.9 曲线拟合1.10 箱线图1.11 频率直方图与密度曲线1.12 柱状图1.13 时间序列…

R语言学习—— ggplot2函数

最近在自学R语言&#xff0c;但是从纯粹的理论开始学习太慢了而且没有实操不太行&#xff0c;所以目前是在实际应用中查漏补缺&#xff0c;遇到什么临时学什么&#xff0c;然后把笔记都一一记录下啦。分享出来一边是方便自己查找&#xff0c;另一方面也是想方便和我一样入门的菜…

R语言可视化【ggplot2】

R语言可视化【ggplot2】 文章的文字/图片/代码部分/全部来源网络或学术论文或课件&#xff0c;文章会持续修缮更新&#xff0c;仅供学习使用。 目录 R语言可视化【ggplot2】 一、可视化介绍 二、不同情况适用的图形 类别比较&#xff1a; 数值关系&#xff1a; 数据分布…

马斯克成立XAI公司: 探索宇宙的真实本质

尊敬的读者朋友们&#xff0c;欢迎来到CSDN&#xff01;我是CSDN博主&#xff0c;今天非常高兴为大家带来这篇文章&#xff0c;我们将一起探索马斯克成立xAI公司的意义和目标&#xff0c;以及这个活动的丰富内容。让我们一起踏上这场奇幻之旅&#xff01; 【引言】 在科技界的…

2023年十大科技趋势预测【集锦:机构和GPT们的科技趋势预测,欢迎大家前来围观,看看谁预测得准~~~】

目录 2023年十大科技趋势预测——Claude+ 2023年十大科技趋势预测——GPT-4 1. 量子计算

不止ChatGPT,谷歌云 AI 方案早已厉兵秣马!

【本文由Cloud Ace整理发布&#xff0c;更多内容请访问 Cloud Ace 官网】 近日 ChatGPT 爆火&#xff0c;掀起热议&#xff0c;能聊天能写代码&#xff0c;还能写策划稿&#xff0c;AI 似乎已逐渐变得无所不能。 不过在 AI 对话上&#xff0c;谷歌早在17年就提出了 Dialogflow …

同声传译例子

效果&#xff1a; 准备开源中… 包括&#xff1a; 前端后端架构数据处理模型原理模型训练模型推理测试集评价方法&脚本部分数据

微信小程序 -- 获取语音,并将语音转为文字(插件:微信同声传译)

实现的功能是获取语音&#xff0c;并将语音转为文字&#xff0c;实现效果如下&#xff1a; 1. 小程序后台添加插件&#xff1a;微信同声传译 登录小程序后台&#xff1a;https://mp.weixin.qq.com 11. 设置 -> 第三方设置 -> 添加插件 12. 输入“微信同声传译”&#…

小程序使用微信同声传译进行语言播报(数字播报问题)

小程序使用微信同声传译进行语言播报&#xff08;数字播报问题&#xff09; 需求是产品提的 代码是我写的&#xff08;没办法&#xff0c;卑微打工人&#xff09; 废话不多说直接开始吧 首先在微信微信公众平台插件管理引入插件&#xff08;微信同声传译插件地址&#xff09;…

微信公众平台-设置-第三方设置-插件-搜不到微信同声传译插件

给小程序添加插件&#xff0c;按照官方的方法在插件那里搜不到微信同声传译插件 只好去微信服务平台搜一下 找到了微信同声传译&#xff0c;登录后选择给哪个小程序添加&#xff0c;添加成功后去小程序的微信公众平台看已经添加成功了&#xff0c;而且是已通过状态。

电影、音频同声传译教程(免费实现)

实现思路 实时语音转写&#xff08;需要申请一个在线的语音转写api接口&#xff09;实时文字翻译&#xff08;需要申请一个即时翻译的api接口&#xff09; 实现 申请阿里云的语音转写api 阿里云网址&#xff1a;https://cn.aliyun.com/ 注册&#xff1a;用支付宝扫码注册即…

python实现免费同声传译 (离线语音识别+免费翻译接口+系统声音录制)

前言 前段时间碰到个英文面试&#xff0c;结果差点因为听不懂美式发音的python&#xff08;派送&#xff09;而GG了。。。我一直说的都是"派森"。。。所以就有个想法&#xff0c;英文电话会议的时候是不是可以做一个实时翻译的小工具&#xff0c;这样就可以给我这样…

uni-app 微信同声传译,实现AI语音功能(语音转文字,文字转语音,英汉互译

uni-app 微信同声传译&#xff0c;实现AI语音功能&#xff08;语音转文字&#xff0c;文字转语音&#xff0c;英汉互译&#xff09; 一&#xff1a;添加插件1、登录微信公众号平台&#xff0c;进入左边导航栏的设置&#xff0c;选择第三方设置&#xff0c;&#xff0c;添加插件…

小程序之定位语音识别=>插件:微信同声传译

说明:文章部分内容及图片出自网络&#xff0c;如有侵权请与我本人联系(主页有公众号:小攻城狮学前端) 作者&#xff1a;小只前端攻城狮、 主页&#xff1a;小只前端攻城狮的主页、 首发&#xff1a;掘金 GitHub&#xff1a;P-J27、 CSDN&#xff1a;PJ想做前端攻城狮 著作权归作…

关于使用微信同声传译报错的问题

最近开发微信小程序&#xff0c;需要用到语音识别的功能&#xff0c;于是就用了微信官方的微信同声传译的插件&#xff0c;但是使用的时候报错了&#xff0c;我使用了云开发&#xff0c;后来经过这是误报&#xff0c;可以忽略&#xff0c;类似的报错也是可以忽略的

百度新突破:AI同声传译系统STACL,可预测,低延迟

文章来源&#xff1a;ATYUN AI平台 百度开发了新的AI系统&#xff0c;名为同声传译和预期与可控延迟&#xff08;STACL&#xff09;&#xff0c;百度声称这代表了自然语言处理的重大突破。 与大多数AI翻译系统不同&#xff0c;STACL能够在演讲者讲话后几秒钟开始翻译&#x…

语音识别+语音合成+同声传译 微信小程序

语音识别语音合成同声传译 微信小程序 代码库链接为&#xff1a;https://github.com/Resulte/SpeechProcessMiniProgram &#xff08;希望您去Github的时候顺便给个Star&#xff09; 项目预览 扫描下方小程序码&#xff0c;即可查看预览&#xff1a; 主页 语音识别 #### 语…