1 初识ggplot2
1.1 功能
-
一个作图包
-
可以创建图表,如散点图、柱状图、线图,将数据可视化
1.2 要素
- 数据(data)和映射(mapping)
- 几何对象(Geometric)
- 标尺(scale)
- 统计变换(Statistics)
- 坐标系统(Coordinante)
- 图层(layer)
- 分面(Facet)
- 主题(Theme)
1.3 理念
- ggplot2将数据,数据到图形要素的映射,以及和数据无关的图形要素绘制分离
- ggplot(data,aes(x,y))+(初始化图形并指定数据源和作图变量)
geom_type()+ (指定图形的类型)
annotate()+ (添加文本注释)
labs()+ (修改住坐标和坐标轴标题)
~~~
1.4 逻辑
- 按照图层进行叠加,通过“+”进行叠加
1.5 一些作图中用的函数
函数 | 添加 | 选项 |
---|---|---|
geom_bar() | 条形图 | color、fill、alpha |
geom_boxplot() | 箱型图 | color、fill、alpha、notch、width |
geom_density() | 密度图 | color、fill、alpha、linetype |
geom_histogram() | 直方图 | color、fill、alpha、linetype、binwidth |
geom_hline() | 水平线 | color、alpha、linetype、size |
geom_jitter() | 抖动点 | color、size、alpha、shape |
geom_line() | 线图 | colorvalpha、linetype、size |
geom_point() | 散点图 | color、alpha、shape、size |
geom_rug() | 地毯图 | color、side |
geom_smooth() | 拟合曲线 | method、formula、color、fill、linetype、size |
geom_text() | 文字注解 | 很多 |
geom_violin() | 小提琴图 | color、fill、alpha、linetype |
geom_vline() | 垂线 | color、alpha、linetype、size |
2 作图
2.1 散点图
library(ggplot2)
ggplot(mtcars,aes(mpg,wt))+geom_point
2.2 线性图
ggplot(data,aes(mpg,x,y))+geom_line()
2.3 柱状图
- 查看频率的分布情况
ggplot(data,aes(x))+geom_bar()
ggplot(mtcars,aes(cyl))+geom_bar()
ggplot(mtcars,aes(factor(cyl)))+geom_bar()
- 堆积柱形图
ggplot(mtcars,aes(factor(cyl),fill=factor(am)))+geom_bar()
- 簇状柱形图
ggplot(mtcars,aes(factor(cyl),fill=factor(am)))+geom_bar(position="dodge")
2.4 直方图
查看变量的分布情况
ggplot(data,aes(x))+geom_hisogram()
ggplot(mtcars,aes(mpg))+geom_histogram()
2.5 密度图
- 查看变量频率分布的情况
ggplot(data,aes(x))+geom_density()
~~~
# 根据vs进行分组
#color: 是对图形的边缘、点和线进行描绘
#fill 是进行填充
ggplot(mtcars,aes(mpg,color=factor(vs)))+geom_density()
ggplot(mtcars,aes(mpg,fill=factor(vs)))+geom_density()
2.6 箱型图
-
查看变量的统计值分布
ggplot(data,aes(分类变量x,y))+geom_boxplot()
ggplot(mtcars,aes(factor(vs),mpg))+geom_boxplot()
3 分组组图
3.1
ggplot(mtcars,aes(wt,mpg,color=qsec))+geom_point()
- 进行分组
ggplot(mtcars,aes(wt,mpg,color=factor(vs)))+geom_point()
3.2 aes参数
统一图层的颜色,参数在aes外面
4 分面作图
下面是两个经常要用到的分面函数。
facet_wrap(facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, as.table = TRUE, drop = TRUE)
facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, drop = TRUE)
其中facet_wrap和facet_grid不同在于facet_wrap是基于一个因子进行设置,facets表示形式为:变量(单元格) 而facet_grid是基于两个因子进行设置,facets表示形式为:变量变量(行列),如果把一个因子用点表示,也可以达到facet_wrap的效果,也可以用加号设置成两个以上变量
4.1 轴刻度一致
-
单变量作图
ggplot(mtcars,aes(wt,mpg))+geom_point()+facet_grid(vs~.)
gplot(mtcars,aes(wt,mpg))+geom_point()+facet_grid(.~vs)
4.2 刻度不一致
不同纵轴刻度
不同横轴刻度
ggplot(mtcars,aes(wt,mpg))+geom_point()+facet_grid(~vs,scales="free")

# 这里把scales 设置成free之后,可以看出每个分面都有自己的横坐标刻度,可以单独对x轴或y轴设置
- nrow,ncol 分面索要设置成的行和列,参数为数值,表示几行或者几列
- scales 参数fixed表示固定坐标轴刻度,free表示反馈坐标轴刻度,也可以单独设置成free_x或free_y
- shrink 也和坐标轴刻度有关,如果为TRUE(默认值)则按统计后的数据调整刻度范围,否则按统计前的数据设定坐标。
- drop 表示是否去掉没有数据的分组,默认情况下不显示,逻辑值为FALSE
- as.table 和小图排列顺序有关的选项。如果为TRUE(默认)则按表格方式排列,即最大值(指分组level值)排在表格最后即右下角,否则排在左上角。
- margins 通过TRUE或者FALSE表示否设置而一个总和的分面变量,默认情况为FALSE,即不设置
- space 表示分面空间是否可以按照数据进行缩放,参数和scales一样
5 调整图像的元素
5.1 形状
- 形状:geom_XXX(shape=x),x=1,2,3...,不同数值是不同的形状
- 大小:size=x,x=1,2,3...,数值越大,尺寸越大
5.2 颜色
- color:是对图形的边缘、点和线进行描绘
- fill:填充图形内部的颜色
- 指定填充一种颜色:直接在aes外部填写,color="某种颜色"
5.3 文本注释
annotate("text",x=,y=,label="")
text :表示添加类型为文本
x=,y=表示在指定位置上放上文本
label :表示填写的文本内容
5.4 标题
labs(little="",x="",y="")
5.5 加线条
-
加竖线:geom_vline(xintercept=)
-
加横线:geom_hline(yintercept=)
5.6 xy轴互换
coord_flip()
5.7 调整轴刻度的范围
-
x轴:xlim(下限,上限)
-
y轴:ylim(下限,上限)
5.8 修改轴上的值
-
X:scale_x_continuous(breaks(),labels=c()
-
Y:scale_y_continuous(breaks(),labels=c()
举例
ggplot(mtcars,aes(wt,mpg,color=factor(vs)))+
geom_point()+
annotate("text",x=4,y=20,label="yes")+
labs(title="hello",x="xxx",y="yyy")+
geom_vline(xintercept=3)+
geom_hline(yintercept=20)+
xlim(3,4)+ylim(15,25)

ggplot(mtcars,aes(wt,mpg,color=factor(vs)))+
geom_point()+
annotate("text",x=4,y=20,label="yes")+
labs(title="hello",x="xxx",y="yyy")+
geom_vline(xintercept=3)+
geom_hline(yintercept=20)+
xlim(3,4)+
ylim(15,25)+
scale_x_continuous(breaks = c(3.00,3.25,3.50,3.75,4.00),labels=c("a","b","c","d","e"))
