因为之前自己已经学习过R语言基础的一些内容,包括:数据类型与数据结构、函数与R包、R语言作图基础等,今天的学习内容主要是《R数据科学》这本书的第一章——使用ggplot2进行数据可视化。
结合《R数据科学》食用噢!😀
ggplot2是tidyverse的一个核心R包,首先需要加载tidyverse
library(tidyverse)
此处用到内置数据mpg(mpg是一个数据框)
复习数据框的概念:变量(列)和观测(行)的矩形集合,数据框每一列都有一个唯一的列名,长度相等,同一列的数据类型需要一致,不同列的数据类型可以不一致。
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy))
⭐ggplot画图的入门级模板
以引擎大小displ为x轴,燃油效率hwy为y轴画点图,研究引擎大小和燃油效率之间的关系
由图可见,引擎大小与燃油效率之间呈负相关关系,也就是说,引擎大的汽车燃油效率低,更耗油。
ggplot(data=mpg)
ggplot()函数绘图,ggplot()创建坐标系,地图一个参数data=指明对哪个数据集进行绘图
geom_point()
接下来是向ggplot()中添加图层,函数geom_point向图中添加一个点层
mapping参数定义如何将数据集中的变量映射为图形属性,mapping参数总是与aes()函数成对出现
注意:geom_point是函数,而mapping是它的参数
ggplot(data = <DATA>)+
<GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
在使用时将DATA、GEOM_FUNCTION、MAPPINGS分别替换为相应的数据集、几何对象函数(画什么类型的图)、映射集合(坐标轴内容)
(1)运行ggplot(data=mpg),你会看到什么?
(2)数据集mpg中有多少行?多少列?
“能用代码解决的问题就不要手动去数”
mpg
直接查看
dim(mpg)
都可以解决
(3)变量drv的意义是什么?
?mpg
(4)使用hwy和cyl绘制一张散点图。
ggplot(data = mpg)+
geom_point(mapping = aes(x=hwy,y=cyl))
(5)如果使用class和drv绘制散点图,会发生什么情况?为什么这张图没什么用处?
ggplot(data = mpg)+
geom_point(mapping = aes(x=class,y=drv))
class和drv都是车的类型,用这两个参数作图并不能获得什么有用的信息
将数据集中的变量(列)映射为图形的属性(图中对象的可视化属性:数据点的大小、形状和颜色)
将图中点的颜色映射为变量class,来显示每辆汽车的类型:
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy,color=class))
也可以用同样的方式将class映射为点的大小
不建议将无序变量class映射为有序图形属性size
也可以将class映射为控制点透明度的alpha图形属性/点的形状
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy,alpha=class))
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy,shape=class))
ggplot2只能同时使用6种形状
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy),color="blue")
这里的color和上面的color=class有什么区别?
(1)此时颜色不会传达关于变量的信息,仅仅改变图的外观
(2)手动设置图形属性时,是将其作为几何对象函数的一个参数,位置在aes()
函数的外面
(3)图形属性要是有意义的值,例如颜色名称是一个字符串color="blue"
点的大小
点的形状:数值 color和fill的区别
😂R studio是色盲也!其实是因为代码错误咯,color="blue"
跑到aes里面啦!
mpg中的哪些变量是分类变量?哪些变量是连续变量?当调用mpg时,如何才能看到这些信息?
glimpse(mpg)
显示为chr的是分类变量,为int的是连续变量。
将一个连续变量映射为color、size和shape。对分类变量和连续变量来说,这些图形属性的表现有什么不同?
color:连续变量使用的是同一种颜色,从浅到深
以连续变量cyl为例
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = cyl))
size:一个区间的size对应不同的变量
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, size = cyl))
shape:连续变量映射到shape中会报错
如果将同一个变量映射为多个图形属性,会发生什么情况?
将同一个变量(cyl)映射为2个图形属性(color,size)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = cyl,size=cyl))
如果将图形属性映射为非变量名对象,比如aes(color = displ < 5______),会发生什么情况?
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = displ < 5))
将图分割成多个分面
facet_wrap()
后面跟的是离散型变量
ggplot(data = mpg) +
geom\_point(mapping = aes(x = displ, y = hwy))+
facet\_wrap(~class,nrow=2)
facet_grid
ggplot(data = mpg) +
geom\_point(mapping = aes(x = displ, y = hwy))+
facet\_grid(drv~cyl)
(1)如果使用连续变量进行分面,会发生什么情况?
见上图
(2)在使用facet_grid(drv ~ cyl)生成的图中,空白单元的意义是什么?它们和以下代码生成的图有什么关系?
空白单元代表没有drv值和cyl值对应的组合
(3)以下代码会绘制出什么图?“.”的作用是什么?
“.”的作用表示不在行或列的维度分面
“.”在前表示不按行分面,在后表示不按列分面
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ .)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(. ~ cyl)
(4)查看本节的另一个分面图:与使用图形属性相比,使用分面的优势和劣势分别是什么?如果有一个更大的数据集,你将如何权衡这两种方法的优劣?
优势:根据想要观测的变量将数据分为每一分面,显示出每一分面中的趋势及不同分面之间的差别
劣势:由于数据被分割为一个个的分面,数据整体的趋势就看不出来了
如果有一个更大的数据集,就需要根据目标判断,如果看整体趋势的话就不用分面,如果看单个变量的变化趋势就可以使用分面
(5)阅读?facet_wrap的帮助页面。nrow和ncol的功能分别是什么?还有哪些选项可以控制分面的布局?为什么函数facet_grid()没有变量nrow和ncol?
facet_grid()只会是单列或者单行,不需要nrow和ncol这两个参数。
(6)在使用函数facet_grid()时,一般应该将具有更多唯一值的变量放在列上。为什么这么做呢?
几何对象:图中用来表示数据的几何图形对象
条形图:使用了条形几何对象
折线图:使用了直线几何对象
箱线图:使用了矩形和直线几何对象
可以使用不同的几何对象来表示同样的数据
geom_point()
geom_smooth()
ggplot2中的每个几何对象函数都有一个mapping参数
同一张图中可以放置多个几何对象
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy))+
geom_smooth(mapping = aes(x=displ,y=hwy))
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+
geom_point()+
geom_smooth()
这里x、y传递给了ggplot()函数作为全局映射
可以在不同的图层中显示不同的图形属性:
ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+
geom_point(mapping = aes(color=class))+
geom_smooth()
(1)在绘制折线图、箱线图、直方图和分区图时,应该分别使用哪种几何对象?
geom_line、geom_boxplot、geom_histogram、facet_grid
(2)在脑海中运行以下代码,并预测会有何种输出。接着在R中运行代码,并检查你的预测是否正确。
ggplot(
data = mpg,
mapping = aes(x = displ, y = hwy, color = drv)
) +
geom_point() +
geom_smooth(se = FALSE)
(3)show.legend = FALSE的作用是什么?删除它会发生什么情况?为什么要在本章前面的示例中使用这句代码?
不显示图例
(4)geom_smooth()函数中的se参数的作用是什么?
六张图的作图代码与不同的拼图方法
p1 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
geom_point(size = 2.5) +
geom_smooth(se = F, size = 1.5)
p2 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
geom_point(size = 2.5) +
geom_smooth(se = F, size = 1.5, mapping = aes(group = drv))
p3 <- ggplot(data = mpg, mapping = aes(displ, hwy, color = drv)) +
geom_point(size = 2.5) +
geom_smooth(se = F, size = 1.5, mapping = aes(group = drv, color = drv))
p4 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
geom_point(size = 2.5, mapping = aes(color = drv)) +
geom_smooth(se = F, size = 1.5)
p5 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
geom_point(size = 2.5, mapping = aes(color = drv)) +
geom_smooth(se = F, size = 1.5, mapping = aes(group = drv, linetype = drv))
p6 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
geom_point(size = 2.5, mapping = aes(color = drv))
# 方法一
library(gridExtra)
grid.arrange(p1, p2, p3, p4, p5, p6, nrow = 3, ncol = 2)
# 方法二
library(cowplot)
plot_grid(p1, p2, p3, p4, p5, p6, nrow = 3, ncol = 2, labels = c("A","B","C","D","E","F"))
#方法三
library(patchwork)
p1 + p2 + p3 + p4 + p5 + p6 + plot_layout(nrow = 3) + plot_annotation(tag_levels = 'A')
统计变换(statistical transformation, stat):绘图时用来计算新数据的算法
stat_count()
可以替换geom_bar()
每个几何对象函数都有一个默认统计变换
每个统计变换函数都有一个默认几何对象
(1)stat_summary()函数的默认几何对象是什么?不使用统计变换函数的话,如何使用几何对象函数重新生成下列图形?
stat_summary()函数的默认几何对象:pointrange
geom_pointrange
用于绘制数据点的范围
(2)geom_col()函数的功能是什么?它和geom_bar()函数有何不同?
(3)多数几何对象和统计变换都是成对出现的,总是配合使用。仔细阅读文档,列出所有成对的几何对象和统计变换。它们有什么共同之处?
(4)stat_smooth()函数会计算出什么变量?哪些参数可以控制它的行为?
(5)在比例条形图中,我们需要设定group = 1,这是为什么呢?换句话说,以下两张图会有什么问题?
任何图形都是数据集、几何对象、映射集合、统计变换、位置调整、坐标系和分面模式的一个组合!
ggplot(data = <DATA>) +
<GEOM_FUNCTION>( mapping = aes(<MAPPINGS>), stat = <STAT>, position = <POSITION>) +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION>
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。