1.1 简介
tidyverse的一个核心R包--ggplot2
首先安装tidyverse
install.packages("tidyverse")
其次要加载tidyverse:
library(tidyverse)
R包只需安装一次,但每次开始新会话时都要重新加载。
1.2 第一步
1.2.1 mpg数据框
数据框:是变量(列)和观测(行)的矩形集合。
mpg:包含了由美国环境保护协会收集的38种车型的观测数据。
?mpg
:了解更多关于mpg的信息,每个变量代表什么。举例:displ: 引擎大小,单位为升;hwy: 汽车在高速公路上行驶时的燃油效率,单位为英里/加仑。效率高耗油少效率低耗油多。
1.2.2 创建ggplot图形
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))
提示: displ和hwy之间是负相关=大引擎更耗油
ggplot(data=mpg)
创建一张空白图函数geom_point()=创建散点图
ggplot2中每个几何对象函数都有一个mapping参数。mapping参数总是与aes()函数成对出现,aes()函数的x参数和y参数分别指定了映射到x轴的变量与映射到y轴的变量。
1.2.3 绘图模板
ggplot(data=<DATA>)+
<GEOM_FUNCTION>(mapping=aes(<MAPPINGS>))
接下来的部分是展示如何完成并扩展这个模板,以制作出各种类型的图。
1.3 图形属性映射
定义/概念学习
图形属性:是图中对象的可视化属性,其中包括数据点的大小,形状和颜色。
标度变换:ggplot2会自动为每个变量值分配唯一的图形属性水平的这个过程。
aes():将图层中使用的每个图形属性映射集合在一起,然后传递给该图层的映射参数
举例1:将点的颜色映射为变量class,从而揭示每辆汽车的类型:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, color=class))
举例2:将无序变量class映射为有序图形属性size:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, size=class))
举例3:将变量class映射为不同点透明度:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, alpha=class))
举例4:将变量class映射为不同形状:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, shape=class))
“gglot2只能同时使用6种形状”
为几何对象设置图形属性,要在函数aes()的外部进行设置,并为这个图形属性选择一个有意义的值
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy), color="blue")
此时颜色不会传达关于变量的信息,只是改变图的外观。
颜色名称是一个字符串;点的大小毫米表示;点的形状是一个数值。
举例说明:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy), shape=24, color="red",fill="white")
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.5.2 函数facet_grid()
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
facet_wrap(drv ~ cyl)
1.6 几何对象
几何对象:图中用来表示数据的几何图形对象。
条形图——条形几何对象
折线图——直线几何对象
箱线图——矩形和直线几何对象
散点图——点几何对象——geom_point
曲线图——平滑曲线几何对象——geom_smooth
ggplot2提供了30多种几何对象,其扩展包甚至提供更多。
举例说明
(一)1条平滑曲线
ggplot(data=mpg)+
geom_smooth(mapping=aes(x=displ,y=hwy))
(二)不同线性不同曲线,每条曲线对应映射到线型的变量的一个唯一值
ggplot(data=mpg)+
geom_smooth(mapping=aes(x=displ,y=hwy,linetype=drv))
(三)同一张图多个几何对象,向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()
都是下图:
如果将映射放在几何对象函数中,ggplot2会将其看作这个图层的局部映射,仅对该图层有效。
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point(mapping=aes(color=class))+
geom_smooth()
为不同图层指定不同的数据
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point(mapping=aes(color=class))+
geom_smooth(data=filter(mpg, class == "subcompact"),se=FALSE)
se=standard error, 是否display confidence interval around smooth
1.7 统计变换
定义/概念
统计变换 stat (statistical transformation):绘图时用来计算新数据的算法。
每个几何对象函数都有一个默认统计变换,每个统计变换函数都有一个默认几何对象。
举例详述:
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut))
?geom_bar显示出stat的默认值是count:这说明geom_bar()使用stat_count()函数可以进行统计变换
想要显示使用某种统计变换的3个原因如下:
(1) 想要覆盖默认的统计变换
条形高度已经存在与数据,而不是像前一个图一样,条形高度由对行进行计数来生成:
<- 赋值;tibble:简单数据框,用tidyverse中的tibble包实现。
(2) 想要覆盖从统计变换生成的变量到图形属性的默认映射。
举例: 你或许想要显示一张表示比例而不是计数的条形图
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, y=..prop.., group=1))
(3) 在代码中强调统计变换
举例:使用stat_summary()函数将人们的注意力吸引到你计算出的那些摘要统计量上。
ggplot(data=diamonds)+
stat_summary(mapping=aes(x=cut,y=depth),fun.ymin=min,fun.ymax = max, fun.y = median)
ggplot2速查表已下载
(https://rstudio.com/resources/cheatsheets/)
1.8 位置调整
(一)为条形图上色
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, color=cut))
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=cut))
如果将图形属性映射到另一个变量(如,clarity),那么条形会自动分块堆叠起来。
每个彩色矩形表示cut和clarit的一种组合。
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity))
这种堆叠是由position参数设定的位置调整功能自动完成的。
(二)如果不想生成堆叠式条形图,还可以使用以下3种选项之一:"identity", "fill", "dodge"。
- position = "identity": 将每个对象直接显示在图中。(不太适合条形图,因为重叠)
设置alpha参数为较小的书,可以使得条形略微透明
ggplot(data=diamonds, mapping = aes(x=cut,fill=clarity))+
geom_bar(alpha=1/5, position = "identity")
设置fill=NA, 让条形完全透明
ggplot(data=diamonds, mapping = aes(x=cut,color=clarity))+
geom_bar(fill=NA, position = "identity")
- position = "fill": 效果与堆叠相似(每组条形具有同样的高度)
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity),position = "fill")
-position = "dodge": 将每组中的条形依次并列放置
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity),position = "dodge")
(三)散点图的位置调整
- position = "jitter": 将重叠的点分散开来 = geom_jitter()
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy),position="jitter")
1.9 坐标系
- coord_flip()函数:交换x轴和y轴
ggplot(data=mpg, mapping = aes(x=class,y=hwy))+
geom_boxplot()
ggplot(data=mpg, mapping = aes(x=class,y=hwy))+
geom_boxplot()+
coord_flip()
- coord_quickmap()函数:为地图设置合适的纵横比,适用于空间数据
未安装Package : map所以不能用数据和示例
- 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()
bar+coord_polar()
1.10 图形分层语法
一个正式语法系统(7个参数一同组成了图形语法)
ggplot(data=<DATA>)+
<GEOM_FUNCTION>(mapping = aes (<MAPPINGS>),stat = <STAT>, position =<POSITION>+
<COORDINATE_FUNCTION>+
<FACET_FUNCTION>
如何从头构建一个基本图形
step1 首先要有一个数据集
step2 通过统计变换将其转换为想要显示的信息
step3 选择一个几何对象来表示转换后的数据中的每个观测值
step4 选择几何对象的图形属性来表示数据中的变量
step5 选择放置几何对象的坐标系
step6 进一步调整几何对象在坐标系中的位置(位置调整),将图划分为多个子图(分面)...
使用这种方法可以构建任何图形。