R语言数据分析(三)

R语言数据分析(三)


文章目录

  • R语言数据分析(三)
  • 一、可视化步骤
    • 1.1 创建ggplot
    • 1.2 添加美学和图层
    • 1.3 简化代码
  • 二、可视化分布
    • 2.1 分类变量
    • 2.2 数值变量
  • 三、可视化关系
    • 3.1 数值变量和分类变量
    • 3.2 两个分类变量
    • 3.3 两个数值变量
    • 3.4 三个或更多变量
  • 四、保存可视化结果
  • 总结


#前言

前面我们已经学习了基本的数据导入的知识,这一节,我们将来介绍数据分析中很重要的一个模块,数据可视化的内容。R中数据可视化有很多可以实现的包,而ggplot2是其中最常用的包之一,我们接下来就对其进行介绍。(需提前加载tidyverse包)

一、可视化步骤

我们将使用palmerpenguins包中企鹅数据集来进行可视化的研究。

# install.packages("palmerpenguins")
library(palmerpenguins)
penguins
#> # A tibble: 344 × 8
#>    species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
#>    <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
#>  1 Adelie  Torgersen           39.1          18.7               181        3750
#>  2 Adelie  Torgersen           39.5          17.4               186        3800
#>  3 Adelie  Torgersen           40.3          18                 195        3250
#>  4 Adelie  Torgersen           NA            NA                  NA          NA
#>  5 Adelie  Torgersen           36.7          19.3               193        3450
#>  6 Adelie  Torgersen           39.3          20.6               190        3650
#>  7 Adelie  Torgersen           38.9          17.8               181        3625
#>  8 Adelie  Torgersen           39.2          19.6               195        4675
#>  9 Adelie  Torgersen           34.1          18.1               193        3475
#> 10 Adelie  Torgersen           42            20.2               190        4250
#> # ℹ 334 more rows
#> # ℹ 2 more variables: sex <fct>, year <int>

该数据集包括8列,其中变量包括企鹅的物种等一系列列名元素。可以通过?penguins查看具体信息。下面将一步步讲解可视化的过程。

1.1 创建ggplot

第一步就是使用函数ggplot()开始绘图,这将定义一个绘图对象,然后添加图层。其中的第一个参数是图形中要使用的数据集,由于我们还没有告诉它要怎么可视化,所以它是空的:

ggplot(data = penguins)

在这里插入图片描述

接下来,要告诉ggplot()如何表示数据中的信息。该函数的mapping参数定义了如何将数据集中的变量映射到绘图的视觉属性(美学aesthetics)中。mapping的参数在aes()函数中进行定义:

ggplot(data = penguins,mapping = aes(x = flipper_length_mm, y = body_mass_g)
)

在这里插入图片描述

此时空画布上有了更多的结构了,xy轴的信息已经展现在画布上了。

接下来,我们要定义一个几何图形,用于表述数据。ggplot2中可用的几何对象,其函数以geom_开头。比如折线图使用(geom_line)来表示等。使用方法如下:

ggplot(data = penguins,mapping = aes(x = flipper_length_mm, y = body_mass_g)
) + geom_point()
#> Warning: Removed 2 rows containing missing values (`geom_point()`).

在这里插入图片描述

使用这个图可用得到一些数据的信息。但是我们看到有警告信息:“Removed 2 rows containing missing values”。这是因为数据集中有两只企鹅缺少相关信息。(后续将隐藏警告信息)

1.2 添加美学和图层

我们想要进一步观察每个物种间的数据关系要怎么做呢?我们可用通过不同颜色的点来表示物种来做到这一点。为了实现这一点,可以在aes()内部进行设定。

ggplot(data = penguins,mapping = aes(x = flipper_length_mm, y = body_mass_g, color = species)
) +geom_point()

在这里插入图片描述

当分类变量映射到美学参数时,ggplot2会自动为变量的每个唯一级别分配美学的唯一值(这里分配的是颜色),这一过程称为缩放(scaling)。之后ggplot2还会添加一个图例,解释哪些值对应哪些级别。

现在让我们在添加一层,显示xy轴数据之间关系的平滑曲线。我们使用geom_smooth()函数作为geom_point()顶部的图层进行添加,这里我们指定使用线性模型来绘制拟合曲线:

ggplot(data = penguins,mapping = aes(x = flipper_length_mm, y = body_mass_g, color = species)
) + geom_point() +geom_smooth(method = "lm")

在这里插入图片描述

我们可以看到此时的拟合曲线是根据物种不同分别进行拟合的,这是由于ggplot中的aes参数定义了全局的美学映射,他会传递到后续的图层中。其实,后续的图层也可以选择自己的局部映射,只需在geom函数中设置mapping参数即可。

ggplot(data = penguins,mapping = aes(x = flipper_length_mm, y = body_mass_g)
) + geom_point(aes(color = species, shape = species)) +geom_smooth(method = "lm")

在这里插入图片描述

注意,还可以为美学参数设置形状的美学,使用shape参数进行设定即可。

最后,我们可以在新图层中使用lab()函数更改绘图的标签,也可以使用scale_color_colorblind()函数更改调色板,这个函数存在于ggthemes包中,是一种对色盲友好的颜色组合。

ggplot(data = penguins,mapping = aes(x = flipper_length_mm, y = body_mass_g)
) +geom_point(aes(color = species, shape = species)) +geom_smooth(method = "lm") +labs(title = "Body mass and flipper length",subtitle = "Dimensions for Adelie, Chinstrap, and Gentoo Penguins",x = "Flipper length (mm)", y = "Body mass (g)",color = "Species", shape = "Species") +ggthemes::scale_color_colorblind()

在这里插入图片描述

1.3 简化代码

ggplot()的前两个参数的名称可以省略:

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g))

这通常可以和管道函数联用:

penguins |> ggplot(aes(x = flipper_length_mm, y = body_mass_g))

二、可视化分布

可视化变量如何分布取决于变量的类型是分类变量还是数值变量。

2.1 分类变量

如果变量只能在特定范围内选择一个,则是分类变量。考察分类变量的分布可以使用条形图,图的高度显示每个x观测值的数量。

ggplot(penguins, aes(x = species)) +geom_bar()

在这里插入图片描述

可以看到条形图并未按照一定顺序进行排序,可以通过一定的设置实现排序(后续将会继续介绍关于此函数的高阶技巧):

ggplot(penguins, aes(x = fct_infreq(species))) +geom_bar()

在这里插入图片描述

2.2 数值变量

如果变量采用的是各种数值,并且可以对这些数值进行加减求平均等操作,改变量就是数值变量。数值变量可以是连续的也可以是离散的。

连续数值变量的一种常用的可视化方式是直方图。

ggplot(penguins, aes(x = body_mass_g)) +geom_histogram(binwidth = 200)

在这里插入图片描述

直方图将x轴分为等间距的条柱,然后使用条形图的高度显示落在每个条柱之间的观测值的数量。可以使用binwidth参数来设置直方图中间隔的宽度,该参数以x变量的单位进行测量。使用直方图的时候,应该始终探索各种binwidth,来找到合适的模式。

另一种可视化方式是密度图。它是直方图的平滑版本。

ggplot(penguins, aes(x = body_mass_g)) +geom_density()

在这里插入图片描述

三、可视化关系

为了可视化某些数据的关系,我们至少要在美学中加入两个变量。

3.1 数值变量和分类变量

这些关系可以使用箱型图来展示。该图主体的箱型展示了数据的中位数、1/4位数和3/4位数。两端的竖线为延伸至最远处的非异常点,从箱边往外大于1.5倍的四分位数的值被认为是异常值,将被标出。

ggplot(penguins, aes(x = species, y = body_mass_g)) +geom_boxplot()

在这里插入图片描述

或者也可以制作密度图:

ggplot(penguins, aes(x = body_mass_g, color = species, fill = species)) +geom_density(linewidth = 0.8, alpha = 0.3) # 可自行设置

在这里插入图片描述

3.2 两个分类变量

两个分类变量之间的关系往往会选择使用堆积图来展示。

ggplot(penguins, aes(x = island, fill = species)) +geom_bar()

在这里插入图片描述

另外,可以通过设置geom_bar(position = "fill")来创建相对丰度的图。

3.3 两个数值变量

散点图是该类变量最常选择的图形。前面有过介绍,可以使用geom_pointgeom_smooth结合。

3.4 三个或更多变量

更多变量可以在美学参数中设置不同的美学来进行区分,比如:

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +geom_point(aes(color = species, shape = island))

在这里插入图片描述

但是这样的图形会显得比较杂乱,因此我们介绍另一种方式,就是将绘图拆分成为多个分面,每个分面显示一个数据子集的子图。这会使用到facet_wrap(),其第一个参数是一个formula,使用~后跟一个变量名称,传递到其中的变量应该是分类的变量。

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +geom_point(aes(color = species, shape = species)) +facet_wrap(~island)

在这里插入图片描述

四、保存可视化结果

制作出的图形,可能会希望保存起来使用。这就可以通过ggsave()进行。它可以把最近创建的图形保存在磁盘中。如果不指定width和height,ggsave将会从当前绘图设备中获取尺寸。

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +geom_point()
ggsave(filename = "penguin-plot.png") # 它将会把当前终端命令运行的上一个绘图命令绘制的图形进行存储

总结

在这一节,我们初步学习了如何使用R语言的ggplot2进行数据可视化,也学习了很多类型的图形的画法。我们知道了如何在ggplot绘图时设置相应的美学参数以达到不同的作用效果,另外对于不同类型的数据也分别有不同类型的图形可以很好的展示其中数据的关系。这些对应关系所给出的图形示例都不是唯一的答案,要学会自己去学习新的图形的绘图方法,这是很重要的。

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

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

相关文章

虚拟机器centos7无法识别yum 命令异常处理笔记

问题现象 启动虚拟机后执行ipconfig 提示未找到该命令,然后执行yum install -y net-tools提示 curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"的错误 [roothaqdoop~]# ifconfig -bash: ifconfig: 未找到命令 [roothadoop~]# yum install …

超级抽象的前端2

vue3的调用方法失败的原因 function validateConfirm(rule, value, callback) {if (value ! form.password) {callback(new Error(两次输入的密码不一致))} else {callback()}function showAgreement() {dialogVisible.value true}function submitForm() {// 这里是提交表单的…

逆推求期望DP

我的开始的想法&#xff1a;状态设置 dp[i][j] 为玩了 i 个职业 j 个阵营的期望天数&#xff0c;初始值很好解决 dp[1][1]1 &#xff0c;但是有个问题&#xff0c;每对 (i,j) 除了边界那里&#xff0c;会由三个地方来决定这一个(i-1,j-1)(i,j-1)(i-1,j)&#xff0c;所以&#x…

【spring】 ApplicationListener的使用及原理简析

文章目录 使用示例&#xff1a;原理简析&#xff1a; 前言&#xff1a;ApplicationListener 是spring提供的一个监听器&#xff0c;它可以实现一个简单的发布-订阅功能&#xff0c;用有点外行但最简单通俗的话来解释&#xff1a;监听到主业务在执行到了某个节点之后&#xff0c…

【ACM出版】第五届计算机信息和大数据应用国际学术会议(CIBDA 2024)

第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09; 2024 5th International Conference on Computer Information and Big Data Applications 重要信息 大会官网&#xff1a;www.ic-cibda.org 大会时间&#xff1a;2024年3月22-24日 大会地点&#…

Atcoder ABC341 A-D题解

比赛链接:ABC341 Problem A: 先签个到。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int i0;i<n;i)cout<<"10"<<endl;cout<<"1"<<endl;return 0; } Problem B: 继续签。 #i…

week04day03(爬虫 beautifulsoup4、)

一. 使用bs4解析网页 下载bs4 - pip install beautifulsoup4 使用的时候 import bs4专门用于解析网页的第三方库 在使用bs4的时候往往会依赖另一个库lxml pip install lxml 网页代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><…

【Python笔记-设计模式】对象池模式

一、说明 用于管理对象的生命周期&#xff0c;重用已经创建的对象&#xff0c;从而减少资源消耗和创建对象的开销 (一) 解决问题 主要解决频繁创建和销毁对象所带来的性能开销问题。如数据库连接、线程管理、网络连接等&#xff0c;对象的创建和销毁成本相对较高&#xff0c…

IC卡批量加密软件使用

IC卡出厂是默认的密码FFFFFFFFFFFF空白卡&#xff0c;IC卡在门禁、电梯、食堂消费、洗浴一卡通等系统上使用前是需要初始化的&#xff0c;即加密的同时写入基础数据。 为什么要用批量加密软件呢&#xff0c;以为需要加密的卡有几百张&#xff0c;几千张&#xff0c;数量比较多&…

shiro 整合 springmvc 实战及源码详解

序言 前面我们学习了如下内容&#xff1a; 5 分钟入门 shiro 安全框架实战笔记 shiro 整合 spring 实战及源码详解 相信大家对于 shiro 已经有了最基本的认识&#xff0c;这一节我们一起来学习写如何将 shiro 与 springmvc 进行整合。 spring mvc 整合源码 maven 依赖 版…

水务界的“数字蝶变”:水务公司重构自我,开启智慧供水新时代

历经六十余载的稳健前行&#xff0c;某水务公司已发展成为国有一档企业中的供水行业佼佼者&#xff0c;不仅主营业务突出&#xff0c;更拥有完善的产业链条。然而&#xff0c;面对供水业务24小时连续作业的高要求&#xff0c;以及业务管理需求的日益复杂化&#xff0c;公司意识…

【Django开发】0到1开发美多shop项目:Celery短信和用户注册。全md文档笔记(附代码,已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目开发相关知识。本项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现…

网页403错误(Spring Security报异常 Encoded password does not look like BCrypt)

这个错误通常表现为"403 Forbidden"或"HTTP Status 403"&#xff0c;它指的是访问资源被服务器理解但拒绝授权。换句话说&#xff0c;服务器可以理解你请求看到的页面&#xff0c;但它拒绝给你权限。 也就是说很可能测试给定的参数有问题&#xff0c;后端…

学习Redis基础篇

1.初识Redis 1.认识NoSQL 2.认识Redis 3.连接redis命令 4.数据结构的介绍 5.通用命令 2.数据类型 1.String类型 常见命令&#xff1a;例子&#xff1a;set key value

Vue3实现页面顶部进度条

Vue3页面增加进度条 新建进度条组件新建bar.ts导航守卫中使用 Vue3项目使用导航守卫给页面增加进度条 新建进度条组件 loadingBar.vue <template><div class"wraps"><div ref"bar" class"bar"></div></div> <…

VSCODE上使用python_Django_创建最小项目

接上篇 https://blog.csdn.net/weixin_44741835/article/details/136135996?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136135996%22%2C%22source%22%3A%22weixin_44741835%22%7D VSCODE官网&#xff1a; Editing Python …

精酿啤酒:麦芽与啤酒花搭配的奥秘

麦芽和啤酒花是啤酒酿造过程中不可或缺的原料&#xff0c;它们的风味和特点对啤酒的口感和品质产生着深远的影响。Fendi Club啤酒在麦芽与啤酒花的搭配方面有着与众不同的技巧和见解&#xff0c;让啤酒的口感更加丰富和迷人。 首先&#xff0c;麦芽的选择是啤酒酿造的关键之一。…

【目标检测新SOTA!v7 v4作者新作!】YOLO v9 思路复现 + 全流程优化

YOLO v9 思路复现 全流程优化 提出背景&#xff1a;深层网络的 信息丢失、梯度流偏差YOLO v9 设计逻辑可编程梯度信息&#xff08;PGI&#xff09;&#xff1a;使用PGI改善训练过程广义高效层聚合网络&#xff08;GELAN&#xff09;&#xff1a;使用GELAN改进架构 对比其他解法…

精通Django模板(模板语法、继承、融合与Jinja2语法的应用指南)

模板&#xff1a; 基础知识&#xff1a; ​ 在Django框架中&#xff0c;模板是可以帮助开发者快速⽣成呈现给⽤户⻚⾯的⼯具模板的设计⽅式实现了我们MVT中VT的解耦(M: Model, V:View, T:Template)&#xff0c;VT有着N:M的关系&#xff0c;⼀个V可以调⽤任意T&#xff0c;⼀个…

百度地图海量点方案趟坑记录(百度地图GL版 + MapVGL + vue3 + ts)

核心需求描述 不同层级有不同的海量图标展示底层海量图标需要展示文字拖动、放大缩小都需要重新请求数据并展示固定地图中心点&#xff08;拖动、放大缩小&#xff0c;中心点始终在地图中心&#xff09; 示例图片&#xff1a;&#xff08;某些图片涉及公司数据&#xff0c;就未…