R语言绘图之ggplot2
- 一.绘图的基本要素
- 1.图形映射
- 2.分面:
- 3.添加平滑曲线
- 二.绘制条形图
- 设置坐标抽格式
一.绘图的基本要素
首先载入tidyverse包
install.packages("tidyverse")
library(tidyverse)
这一行代码加载了tidyverse的核心R包。在几乎所有的数据分析任务中,你都会用到这些R包。这行代码还会告诉你tidyverse中的哪些函数与基础R包(或者已加载的其他R包)中的函数有冲突。
本文使用r语言自带的数据框,mpg来操作
1.绘制基础散点图:
mpg
ggplot(mpg,aes(displ,hwy))+geom_point()
注意ggplot只接受数据框格式,,aes()函数的x参数和y参数分别指定了映射到x轴的变量与映射到y轴的变量。ggplot2在data参数中寻找映射变量,本例中就是mpg。
aes(displ,hwy)分别是x轴和y轴,geom_point()是绘制散点图
可以看出随着displ的增大,hwy总体是减少的。
你是否发现,虽然数据集中有234个观测值,但散点图中只显示了126个点?因为hwy和displ的值都进行了舍入取整,所以这些点显示在一个网格上时,很多点彼此重叠了。这个问题称为过绘制.
通过将位置调整方式设为“抖动”,可以避免这种网格化排列。**position = “jitter”**为每个数据点添加一个很小的随机扰动,这样就可以将重叠的点分散开来,因为不可能有两个点会收到同样的随机扰动:
ggplot(mpg,aes(displ,hwy))+geom_point(position = "jitter")
1.图形映射
这些车有不同的类型,通过color=class可以为不同的种类添加颜色
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))
如果你想设置图片整体为单个颜色,比如蓝色,只需要:
ggplot(mpg,aes(displ,hwy))+geom_point(color="blue")
但是如果你这么输入:
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color="blue"))
将不会达到你想要的结果,
可以看到输出结果是红色,不是蓝色,事实上你把bule改为任何颜色结果都是红色,因为aes是分别映射。
你也通过alpha=class,将class映射为控制数据透明度alpha图片属性
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class,alpha=class))
不过会出现警告信息:
离散变量不建议使用
也可以使用shape为不同的种类添加不同的形状
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class,shape=class))
虽然能输出,但suv这里是空的,gplot2只能同时使用6种形状。默认情况下,当使用这种图形属性时,多出的变量值将不会出现在图中。
2.分面:
添加额外变量的一种方法是使用图形属性。另一种方法是将图分割成多个分面,即可以显示数据子集的子图。这种方法特别适合添加分类变量。
要想通过单个变量对图进行分面,可以使用函数facet_wrap()。其第一个参数是一个公式,创建公式的方式是在~符号后面加一个变量名(这里所说的“公式”是R中的一种数据结构,不是数学意义上的公式)。传递给facet_wrap()的变量应该是离散型的。
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+facet_wrap(~class,nrow=2)
这里就对车的不同类型完成了分面。
要想通过两个变量对图进行分面,需要在绘图命令中加入函数facet_grid()。这个函数的第一个参数也是一个公式,但该公式包含由~隔开的两个变量名。
3.添加平滑曲线
只需要把geom_point改为geom_smooth
ggplot(mpg,aes(displ,hwy))+geom_smooth(aes(linetype=drv,color=drv))
二.绘制条形图
这里用的是r语言的数据diamonds
diamonds数据集是ggplot2的内置数据集,包含大约54 000颗钻石的信息,每颗钻石具有price、carat、color、clarity和cut变量。条形图显示,高质量切割钻石的数量要比低质量切割钻石的数量多,这里使用了fill=cut来填充颜色
ggplot(diamonds,aes(x=cut,fill=cut))+geom_bar()
如果将fill图形属性映射到另一个变量(如clarity),那么条形会自动分块堆叠起来。每个彩色矩形表示cut和clarity的一种组合。这种堆叠是由position参数设定的位置调整功能自动完成的
ggplot(diamonds,aes(x=cut,fill=clarity))+geom_bar()
如果不想生成堆叠式条形图,你还可以使用以下3种选项之一:“identity”、“fill"和"dodge”
position = "fill"的效果与堆叠相似,但每组堆叠条形具有同样的高度,因此这种条形图可以非常轻松地比较各组间的比例:
ggplot(diamonds,aes(x=cut,fill=clarity))+geom_bar(position="fill")
position = "dodge"将每组中的条形依次并列放置,这样可以非常轻松地比较每个条形表示的具体数值:
ggplot(diamonds,aes(x=cut,fill=clarity))+geom_bar(position="dodge")
设置坐标抽格式
ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = cut), show.legend = FALSE, width = 1 ) + theme(aspect.ratio = 1) + labs(x = "cut", y = "数目")