第一章 使用ggplot2进行数据可视化
练习
(1)运行ggplot(data = mpg),你会看到什么?
library(ggplot2)
ggplot(data = mpg)
##是一个空白的画板
![image-20210424083110790](https://upload-images.jianshu.io/upload_images/25205178-e89d76001823702d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(2)数据集mpg中有多少行?有多少列
#四种查看方法
dim(mpg)
str(mpg)
ncol(mpg)
nrow(mpg)
library(tibble)
glimpse(mpg)
(3)变量drv的意义是什么?使用?mpg命令阅读帮助文件找出答案
#?mpg
#drv
#the type of drive train, where f = front-wheel drive, r = rear wheel drive, #4 = 4wd
(4)使用hwy和cyl绘制一张散点图
ggplot(mpg)+geom_point(mapping = aes(x=hwy,y=cyl))
(5)如果使用class和drv绘制散点图,会发生什么情况?为什么这张图没什么用处?
ggplot(mpg)+geom_point(mapping = aes(x=class,y=drv))
##每种汽车类型对应的驱动类型,两个变量都是分类变量。
1.3练习
(1)以下这段代码有什么错误?为什么点不是蓝色的?
ggplot(data=mpg)+geom_point(mapping=aes(x=displ,y=hwy,color='blue'))
#正确代码
ggplot(data=mpg)+geom_point(mapping=aes(x=displ,y=hwy),color='blue')
(2)mpg中的那些分量是分类变量?哪些变量是连续变量?(提示:输入?mpg来阅读这个数据集的文档)当调用mpg时,如何才看到这些信息?
?mpg
str(mpg)
tibble[,11] [234 x 11] (S3: tbl_df/tbl/data.frame)
$ manufacturer: chr [1:234] "audi" "audi" "audi" "audi" ...
$ model : chr [1:234] "a4" "a4" "a4" "a4" ...
$ displ : num [1:234] 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
$ year : int [1:234] 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
$ cyl : int [1:234] 4 4 4 4 6 6 6 4 4 4 ...
$ trans : chr [1:234] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
$ drv : chr [1:234] "f" "f" "f" "f" ...
$ cty : int [1:234] 18 21 20 21 16 18 18 18 16 20 ...
$ hwy : int [1:234] 29 29 31 30 26 26 27 26 25 28 ...
$ fl : chr [1:234] "p" "p" "p" "p" ...
$ class : chr [1:234] "compact" "compact" "compact" "compact" ...
#分类变量chr;连续变量int
(3)将一个连续变量映射为color,size和shape。对分类变量和连续变量来说,这些图形的属性的表现有什么不同?
#分类变量
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,color=trans))
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,size=trans))
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,shape=trans))
#连续变量
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,color=year))#连续变量使用的是一种颜色,从浅到深
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,size=year))#一个区间的size对应不同的变量
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,shape=year))#连续变量映射到shape中会报错
(4)如果将同一个变量映射为多个图形属性,会发生什么情况
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,shape=trans,size=trans,color=trans))
(5)stroke这个图形属性的作用是什么?它适用于哪些形状?(提示:试用?geom_point命令)
ggplot(mtcars, aes(wt, mpg)) +
geom_point(shape = 21, colour = "black", fill = "white", size = 5, stroke = 1)
ggplot(mtcars, aes(wt, mpg)) +
geom_point(shape = 21, colour = "black", fill = "white", size = 5, stroke = 5)
ggplot(mtcars, aes(wt, mpg)) +
geom_point(shape = 21, colour = "black", fill = "white", size = 5, stroke =10)
#调整边框的样式 21-24的图形样式。
(6)如果将图形属性映射为非变量名对象,比如aes(color=dospl<5),会发生什么情况?
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy,color =displ<5))
1.5
(1)如果使用连续变量进行分面,会发生什么情况
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy))+facet_wrap(~cty)
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy))+facet_wrap(~displ)
#会使图形异常的小
(2)在使用facet_grid(drv~cyl)生成的图中,空白单元的意义是什么?它们和以下代码生成的图有什么关系?
ggplot(mpg)+geom_point(mapping = aes(x=drv,y=cyl))
ggplot(mpg)+geom_point(mapping = aes(x=displ,y=hwy))+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)查看本节的第一个分面图:
ggplot(data = mpg) +
geom_point(mapping = aes(x=displ, y = hwy)) +
facet_wrap(~ class, nrow = 2)
与使用图形属性相比,使用分面的优势和劣势分别是什么?如果有一个更大的数据集,你将如何权衡这两种方法的优劣?
- 优势:根据想要观测的变量将数据分为每一分页,显示出了每一分页中的趋势及不同分页之间的差别
- 劣势:由于数据被分割为一个个的分页,数据整体的趋势就不能看出来了。
- 根据目的来评判,如果看整体趋势,就不用分页。如果看单个变量的变化趋势,就可以使用分页
(5)阅读?facet_wrap的帮助页面,nrow和ncol的功能分别是什么?还有哪些选项可以控制分面的布局?为什么函数facet_grid()没有变量nrow和ncol?
nrow和ncol分别代表分页的行数和列数
facet_grid只会是单列或者单行,不需要这两个参数
1.6 练习
(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)
# se是否显示置信区间?(默认为TRUE。)ggplot(data = mpg,
mapping = aes(x = displ,y = hwy, color = drv)
) +
geom_point() +
geom_smooth()
(3)show.legend = FALSE的作用是什么?删除它会发生什么情况?你觉得我为什么要在本章前面的示例中使用这句代码?
ggplot(data = mpg) +
geom_smooth(
mapping = aes(x = displ, y = hwy, color = drv) ,
show.legend = TRUE
)
#看着都一样呀 不懂
(4)geom_smooth() 函数中的 se 参数的作用是什么?
se:是否显示置信区间?(默认为TRUE。)
5.以下代码生成的两张图有什么区别吗?为什么?
ggplot(data=mpg,mapping = aes(x=displ,y=hwy))+
geom_point()+
geom_smooth()
ggplot()+
geom_point(data = mpg,mapping = aes(x=displ,y=hwy))+
geom_smooth(data=mpg,mapping = aes(x=displ,y=hwy))
#我没看出区别。。。。
6.自己编写 R 代码来生成以下各图。
rm(list=ls())
p1 <- ggplot(data = mpg,mapping = aes(x=displ,y=hwy))+
geom_point(size=2.5)+
geom_smooth(se=F,size=1.5)
p2 <- ggplot(mpg,mapping = aes(x=displ,y=hwy))+
geom_point(size=2.5)+
geom_smooth(size=1.5,se=F,mapping=aes(group=drv))
p3 <- ggplot(data=mpg,mapping = aes(x=displ,y=hwy,color=drv))+
geom_point(size=2.5)+
geom_smooth(se=F,size=1.5,mapping=aes(group=drv))
p4 <- ggplot(mpg,mapping = aes(x=displ,y=hwy))+
geom_smooth(se=F,size=1.5)+
geom_point(size=2.5,mapping=aes(color=drv))
p5 <- ggplot(mpg,mapping = aes(x=displ,y=hwy))+
geom_smooth(se=F,size=1.5,mapping=aes(linetype=drv))+
geom_point(size=2.5,mapping=aes(color=drv))
p6 <- ggplot(mpg,mapping=aes(x=displ,y=hwy))+
geom_point(size=2.5,mapping = aes(color=drv))
library(patchwork)
p1+p2+p3+p4+p5+p6+plot_layout(nrow=3)+plot_annotation(tag_levels = 'A')
222
1.7
(1)stat_summary() 函数的默认几何对象是什么?不使用统计变换函数的话,如何使用几何对象函数重新生成以上的图?
ggplot(diamonds)+
stat_summary(
mapping = aes(x=cut,y=depth),
fun.ymin = min,
fun.ymax = max,
fun.y=median
)
## 默认几何对象为pointrange
ggplot(data = diamonds) +
geom_pointrange(
mapping = aes(x = cut, y = depth),
stat = "summary",
fun.min = min,
fun.max = max,
fun = median
)
#和上图一样
(2)geom_col() 函数的功能是什么?它和 geom_bar() 函数有何不同?
- geom_col()针对常规的柱状图,既给x,也给y
- geom_bar()针对计数的柱状图,只给x
(3)多数几何对象和统计变换都是成对出现的,总是配合使用。仔细阅读文档,列出所有成对的几何对象和统计变换。它们有什么共同之处?
暂时还不太懂
(4)stat_smooth() 函数会计算出什么变量?哪些参数可以控制它的行为?
?stat_smooth()
(5)在比例条形图中,我们需要设定 group = 1 ,这是为什么呢?换句话说,以下两张图会有什么问题?
group = 1表示讲这些类别之和作为1,进行按比例画柱状图
ggplot(diamonds)+
geom_bar(mapping=aes(x=cut,y=..prop..,group=1))
ggplot(diamonds)+
geom_bar(mapping=aes(x=cut,y=..prop..))
ggplot(data = diamonds) +
geom_bar(
mapping = aes(x = cut, fill = color, y = ..prop..)
)
1.8练习
(1)以下图形有什么问题?应该如何改善?
ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
geom_point()
# 因为舍入取整,造成很多点彼此重叠,因此需要添加随机扰动,ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
geom_point(position = "jitter")
(2)geom_jitter() 使用哪些参数来控制抖动的程度?
水平(width),竖直(height)两个参数
(3)对比 geom_jitter() 与 geom_count() 。
p1 <- ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
geom_count()
p2 <- ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
geom_jitter()
library(patchwork)
p1+p2
(4)geom_boxplot() 函数的默认位置调整方式是什么?创建 mpg 数据集的可视化表示来演示一下。
?geom_boxplot
position = “dodge2”
ggplot(data = mpg, mapping = aes(x = drv, y = hwy)) +
geom_boxplot()
(1)使用 coord_polar() 函数将堆叠式条形图转换为饼图。
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity)) +
coord_polar()
(2)labs() 函数的功能是什么?阅读一下文档。
?labs
用于显示标题,标签,图例。
(3)coord_quickmap() 函数和 coord_map() 函数的区别是什么?
coord_quickmap() 使用一种更快的近似地图投影。这种近似忽略掉地球的弯曲度并调整经纬度的比例。coord_map() 将3D地图垂直投影到2D平面上,使用的是墨卡托投影。前者更优更快。
(4)下图表明城市和公路燃油效率之间有什么关系?为什么 coord_fixed() 函数很重要?geom_abline() 函数的作用是什么?
ggplot(mpg,mapping = aes(x=cty,y=hwy))+
geom_point()+
geom_abline()+
coord_fixed()
cty: city miles per gallon.一加仑油行驶的距离越远,则燃油效率越高。
·coord_fixed()坐标系纵横比可以设置固定,纵横比可以用参数ratio自定义,背景为矩形格子,固定纵横比后,无论什么图形,其比例都是一样的,常用于横轴,纵轴都是数字的情况
·回归曲线
参考:http://www.360doc.com/showweb/0/0/973875577.aspx