第一部分探索--第1章 使用ggplot2进行数据可视化

1.1 简介

tidyverse的一个核心R包--ggplot2
首先安装tidyverse
install.packages("tidyverse")
其次要加载tidyverse:
library(tidyverse)
R包只需安装一次,但每次开始新会话时都要重新加载。

1.2 第一步

1.2.1 mpg数据框

数据框:是变量(列)和观测(行)的矩形集合。
mpg:包含了由美国环境保护协会收集的38种车型的观测数据。

第一部分探索--第1章 使用ggplot2进行数据可视化_第1张图片
mpg

?mpg:了解更多关于mpg的信息,每个变量代表什么。举例:displ: 引擎大小,单位为升;hwy: 汽车在高速公路上行驶时的燃油效率,单位为英里/加仑。效率高耗油少效率低耗油多。

1.2.2 创建ggplot图形

ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))

第一部分探索--第1章 使用ggplot2进行数据可视化_第2张图片
1.jpeg

提示: displ和hwy之间是负相关=大引擎更耗油
ggplot(data=mpg) 创建一张空白图
函数geom_point()=创建散点图
ggplot2中每个几何对象函数都有一个mapping参数。mapping参数总是与aes()函数成对出现,aes()函数的x参数和y参数分别指定了映射到x轴的变量与映射到y轴的变量。

1.2.3 绘图模板

ggplot(data=)+
(mapping=aes())
接下来的部分是展示如何完成并扩展这个模板,以制作出各种类型的图。

1.3 图形属性映射

定义/概念学习
图形属性:是图中对象的可视化属性,其中包括数据点的大小,形状和颜色。
标度变换:ggplot2会自动为每个变量值分配唯一的图形属性水平的这个过程。
aes():将图层中使用的每个图形属性映射集合在一起,然后传递给该图层的映射参数

举例1:将点的颜色映射为变量class,从而揭示每辆汽车的类型
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, color=class))

第一部分探索--第1章 使用ggplot2进行数据可视化_第3张图片
2

举例2:将无序变量class映射为有序图形属性size:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, size=class))

第一部分探索--第1章 使用ggplot2进行数据可视化_第4张图片
3

举例3:将变量class映射为不同点透明度:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, alpha=class))
第一部分探索--第1章 使用ggplot2进行数据可视化_第5张图片
4

举例4:将变量class映射为不同形状:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, shape=class))
第一部分探索--第1章 使用ggplot2进行数据可视化_第6张图片
5

“gglot2只能同时使用6种形状”

为几何对象设置图形属性,要在函数aes()的外部进行设置,并为这个图形属性选择一个有意义的值
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy), color="blue")

第一部分探索--第1章 使用ggplot2进行数据可视化_第7张图片
6

此时颜色不会传达关于变量的信息,只是改变图的外观。
颜色名称是一个字符串;点的大小毫米表示;点的形状是一个数值。

举例说明:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy), shape=24, color="red",fill="white")

第一部分探索--第1章 使用ggplot2进行数据可视化_第8张图片
7

第一部分探索--第1章 使用ggplot2进行数据可视化_第9张图片
8

1.4 常见问题

  • 检查是否输入正确的代码
  • “+” 必须放在一行代码的末尾,不是开头
  • 运行?函数名或者选定函数名称后按F1键,可以获得任何R函数的帮助信息
  • 阅读错误消息
  • 搜Google

1.5 分面 (特别适合添加分类变量)

1.5.1 函数facet_wrap()
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
facet_wrap(~class, nrow=2)

第一部分探索--第1章 使用ggplot2进行数据可视化_第10张图片
9

1.5.2 函数facet_grid()
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
facet_wrap(drv ~ cyl)

第一部分探索--第1章 使用ggplot2进行数据可视化_第11张图片
10

1.6 几何对象

几何对象:图中用来表示数据的几何图形对象。
条形图——条形几何对象
折线图——直线几何对象
箱线图——矩形和直线几何对象
散点图——点几何对象——geom_point
曲线图——平滑曲线几何对象——geom_smooth
ggplot2提供了30多种几何对象,其扩展包甚至提供更多。

第一部分探索--第1章 使用ggplot2进行数据可视化_第12张图片

举例说明
(一)1条平滑曲线
ggplot(data=mpg)+
geom_smooth(mapping=aes(x=displ,y=hwy))

第一部分探索--第1章 使用ggplot2进行数据可视化_第13张图片
11

(二)不同线性不同曲线,每条曲线对应映射到线型的变量的一个唯一值
ggplot(data=mpg)+
geom_smooth(mapping=aes(x=displ,y=hwy,linetype=drv))
第一部分探索--第1章 使用ggplot2进行数据可视化_第14张图片
12

(三) 同一张图多个几何对象,向ggplot2()函数添加多个几何对象函数:
举例:
同一张图绘制两种几何对象(点+曲线)

ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
geom_smooth(mapping=aes(x=displ,y=hwy))
等于以下代码(上个代码有重复内容)
将一组映射传递给ggplot()函数,ggplot会将这些映射作为全局映射应用到图中的每个几何对象中。
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point()+
geom_smooth()
都是下图:
第一部分探索--第1章 使用ggplot2进行数据可视化_第15张图片
13

如果将映射放在几何对象函数中,ggplot2会将其看作这个图层的局部映射,仅对该图层有效。
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point(mapping=aes(color=class))+
geom_smooth()
第一部分探索--第1章 使用ggplot2进行数据可视化_第16张图片
14

为不同图层指定不同的数据
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point(mapping=aes(color=class))+
geom_smooth(data=filter(mpg, class == "subcompact"),se=FALSE)
第一部分探索--第1章 使用ggplot2进行数据可视化_第17张图片
15

se=standard error, 是否display confidence interval around smooth

1.7 统计变换

定义/概念
统计变换 stat (statistical transformation):绘图时用来计算新数据的算法。
每个几何对象函数都有一个默认统计变换,每个统计变换函数都有一个默认几何对象。

举例详述:
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut))

第一部分探索--第1章 使用ggplot2进行数据可视化_第18张图片
16

?geom_bar显示出stat的默认值是count:这说明geom_bar()使用stat_count()函数可以进行统计变换
第一部分探索--第1章 使用ggplot2进行数据可视化_第19张图片
继续往下看,可以发现“computed variables”,它告诉我们stat_count()会计算出两个新变量:count(bin中的点数) 和prop(groupwise proportion 比例)
第一部分探索--第1章 使用ggplot2进行数据可视化_第20张图片

想要显示使用某种统计变换的3个原因如下:
(1) 想要覆盖默认的统计变换
条形高度已经存在与数据,而不是像前一个图一样,条形高度由对行进行计数来生成:

第一部分探索--第1章 使用ggplot2进行数据可视化_第21张图片

<- 赋值;tibble:简单数据框,用tidyverse中的tibble包实现。

(2) 想要覆盖从统计变换生成的变量到图形属性的默认映射。
举例: 你或许想要显示一张表示比例而不是计数的条形图
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, y=..prop.., group=1))

第一部分探索--第1章 使用ggplot2进行数据可视化_第22张图片
17

(3) 在代码中强调统计变换
举例:使用stat_summary()函数将人们的注意力吸引到你计算出的那些摘要统计量上。
ggplot(data=diamonds)+
stat_summary(mapping=aes(x=cut,y=depth),fun.ymin=min,fun.ymax = max, fun.y = median)

第一部分探索--第1章 使用ggplot2进行数据可视化_第23张图片
18

ggplot2速查表已下载
( https://rstudio.com/resources/cheatsheets/)
第一部分探索--第1章 使用ggplot2进行数据可视化_第24张图片
示列

1.8 位置调整

(一)为条形图上色
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, color=cut))

第一部分探索--第1章 使用ggplot2进行数据可视化_第25张图片
19

ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=cut))

第一部分探索--第1章 使用ggplot2进行数据可视化_第26张图片
20

如果将图形属性映射到另一个变量(如,clarity),那么条形会自动分块堆叠起来。
每个彩色矩形表示cut和clarit的一种组合。
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity))

第一部分探索--第1章 使用ggplot2进行数据可视化_第27张图片
21

这种堆叠是由position参数设定的位置调整功能自动完成的。

(二)如果不想生成堆叠式条形图,还可以使用以下3种选项之一:"identity", "fill", "dodge"。

  • position = "identity": 将每个对象直接显示在图中。(不太适合条形图,因为重叠)

设置alpha参数为较小的书,可以使得条形略微透明
ggplot(data=diamonds, mapping = aes(x=cut,fill=clarity))+
geom_bar(alpha=1/5, position = "identity")

第一部分探索--第1章 使用ggplot2进行数据可视化_第28张图片
22

设置fill=NA, 让条形完全透明
ggplot(data=diamonds, mapping = aes(x=cut,color=clarity))+
geom_bar(fill=NA, position = "identity")
第一部分探索--第1章 使用ggplot2进行数据可视化_第29张图片
23

  • position = "fill": 效果与堆叠相似(每组条形具有同样的高度)
    ggplot(data=diamonds)+
    geom_bar(mapping = aes(x=cut, fill=clarity),position = "fill")
    第一部分探索--第1章 使用ggplot2进行数据可视化_第30张图片
    24

-position = "dodge": 将每组中的条形依次并列放置
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity),position = "dodge")

第一部分探索--第1章 使用ggplot2进行数据可视化_第31张图片
25

(三)散点图的位置调整

  • position = "jitter": 将重叠的点分散开来 = geom_jitter()
    ggplot(data = mpg)+
    geom_point(mapping = aes(x=displ,y=hwy),position="jitter")
    第一部分探索--第1章 使用ggplot2进行数据可视化_第32张图片
    26

1.9 坐标系

- coord_flip()函数:交换x轴和y轴
ggplot(data=mpg, mapping = aes(x=class,y=hwy))+
geom_boxplot()

第一部分探索--第1章 使用ggplot2进行数据可视化_第33张图片
27

ggplot(data=mpg, mapping = aes(x=class,y=hwy))+
geom_boxplot()+
coord_flip()
第一部分探索--第1章 使用ggplot2进行数据可视化_第34张图片
28

- coord_quickmap()函数:为地图设置合适的纵横比,适用于空间数据
未安装Package : map所以不能用数据和示例

第一部分探索--第1章 使用ggplot2进行数据可视化_第35张图片
书里的图

- coord_polar()函数:极坐标系,揭示条形图和鸡冠花图之间的有趣联系
bar <- ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut,fill=cut),show.legend = FALSE, width = 1)+
theme(aspect.ratio = 1)+
labs(x=NULL, y=NULL)

bar+coord_flip()

第一部分探索--第1章 使用ggplot2进行数据可视化_第36张图片
29

bar+coord_polar()
第一部分探索--第1章 使用ggplot2进行数据可视化_第37张图片
30

1.10 图形分层语法

一个正式语法系统(7个参数一同组成了图形语法)

ggplot(data=)+
(mapping = aes (),stat = , position =+
+

如何从头构建一个基本图形
step1 首先要有一个数据集
step2 通过统计变换将其转换为想要显示的信息
step3 选择一个几何对象来表示转换后的数据中的每个观测值
step4 选择几何对象的图形属性来表示数据中的变量
step5 选择放置几何对象的坐标系
step6 进一步调整几何对象在坐标系中的位置(位置调整),将图划分为多个子图(分面)...

使用这种方法可以构建任何图形。

你可能感兴趣的:(第一部分探索--第1章 使用ggplot2进行数据可视化)