时间: 2018-07-31
教程: 慕课网 《R语言之数据可视化》 讲师:Angelayuan
学习内容: 课程第三章7-9节
ggplot2绘图有很多的层:
- Data:变量
- Aesthetics:美学层(x,y轴、颜色、大小、标签、形状、线宽等)
- Geometries:几何客体层(散点图、线图、柱状图、条形图等)
- Facets:面(划分绘图面板)
- Statistics:统计层(添加统计信息)
- Coordinates:坐标系(笛卡尔坐标系、极坐标系等)
- Themes:主题(风格设置)
install.packages(“ggplot2”):下载ggplot2包
library(ggplot2):加载ggplot2包
ggplot2绘图系统包括qplot函数和ggplot函数。
qplot函数与Base绘图系统的plot函数类似,但其隐藏了绘图实现的细节,灵活性较差;ggplot函数可以实现qplot函数无法实现的功能,该函数的绘图是通过在其基础上添加层来实现的。
如:
绘制风速~温度的散点图:
qplot(Wind, Temp, data=airquality)
qplot(Wind, Temp, data=airquality, color = Month)
airquality$Month <- factor(airquality$Month)
qplot(Wind, Temp, data=airquality, color = Month)
按月显示不同颜色:
qplot(Wind, Temp, data=airquality, color = Month)
由于原数据集中Month变量是一个连续变量,因此颜色为渐变色。如果想要不同月显示不同颜色(非连续的渐变色),需要将Month变量转为因子变量,如:
airquality$Month <- factor(airquality$Month)
qplot(Wind, Temp, data=airquality, color = Month)
将颜色设为红色:
qplot(Wind, Temp, data=airquality, color=I("red"))
qplot(Wind, Temp, data=airquality, shape = Month)
qplot(Wind, Temp, data=airquality, size = Month)
设置大小为3,x,y轴标签分别为”Wind(mph)”,”Temperature”,标题为”Wind”:
qplot(Wind, Temp, data=airquality, size = I(3),
xlab = "Wind(mph)", ylab = "Temperature",
main = "Wind")
qplot(Wind, Temp, data = airquality,
geom = c("point", "smooth"))
可以看出,图中多了一条平滑的蓝色曲线(回归线)和灰色的条块(置信区间)。
按月生成不同颜色的平滑回归线:
qplot(Wind, Temp, data = airquality, color = Month,
geom = c("point", "smooth"))
> rm(airquality)
Warning message:
In rm(airquality) : object 'airquality' not found
> qplot(Wind, Temp, data=airquality, shape = Month)
Error: A continuous variable can not be mapped to shape
> qplot(Wind, Temp, data = airquality, color = Month,
+ geom = c("point", "smooth"))
可以看出,生成按月表示不同形状的散点图时出现了警告信息:一个连续变量不能映射为不同形状。在画带有按月生成不同颜色的平滑回归线的散点图时,只生成了一个总的回归线,其点是由渐变色表示不同月份的。
按月生成从左至右的多个散点图:
airquality$Month <- factor(airquality$Month)
qplot(Wind, Temp, data = airquality,
facets = .~ Month)
qplot(Wind, Temp, data = airquality,
facets = Month ~.)
可以看出,在定义参数facets时,若为~.变量名,则按变量不同从左至右生成不同的图,若为变量名~.则从上至下生成不同的图。
若在qplot函数中只输入一个数据参数,则默认生成柱状图,如:
qplot(Wind, data = airquality)
qplot(Wind, data = airquality, facets = Month ~.)
若输入y=”数据名”,则生成x为顺序,y为数据值的散点图,如:
qplot(y=Wind,data = airquality)
在qplot函数中定义参数fill,可以得到一个累加的柱状图,如:
qplot(Wind, data = airquality, fill = Month)
生成风速的密度曲线:
qplot(Wind, data = airquality, geom = "density")
按月生成不同颜色的风速的密度曲线:
qplot(Wind, data = airquality, geom = "density",
color = Month)
生成风速的密度点图:
qplot(Wind, data = airquality, geom = "dotplot")
如:
ggplot(airquality, aes(Wind, Temp))
上述程序中第一个参数为数据集,第二个参数为美学属性,即定义风速Wind和温度Temp分别对应x轴和y轴,可以看出如果仅仅调用ggplot函数,数据点无法在图中绘制出来,需要在该函数的基础上加上各种层才能画出图来。
原程序已有数据层和美学层,现在加入几何客体层绘制散点图:
ggplot(airquality, aes(Wind, Temp)) +
geom_point()
设置颜色为钢青色,透明度为0.4,大小为5:
ggplot(airquality, aes(Wind, Temp)) +
geom_point(color = "steelblue",
alpha = 0.4, size = 5)
按月显示不同颜色,透明度为0.4,大小为5:
ggplot(airquality, aes(Wind, Temp)) +
geom_point(aes(color = factor(Month)),
alpha = 0.4, size = 5)
可以在几何客体加入统计信息或独立的添加统计信息层:
ggplot(airquality, aes(Wind, Temp)) +
geom_point() +
geom_smooth()
ggplot(airquality, aes(Wind, Temp)) +
geom_point() +
stat_smooth()
上述第一句程序是在几何客体层加入统计信息,第二句是独立的添加统计信息,二者所得的图形一致,均为上图所示。
统计信息层不依赖与几何客体层,可以只有统计信息层,如:
ggplot(airquality, aes(Wind, Temp)) +
stat_smooth()
生成一元线性回归线,并去掉置信区间:
ggplot(airquality, aes(Wind, Temp)) +
stat_smooth(method = "lm", se = FALSE)
可以看出,所得图形上只有一条直线,因为一元线性回归曲线为直线。将统计层中参数se定义为FALSE的意思为不显示置信区间。
按月生成不同颜色的一元线性回归线,并去掉置信区间:
ggplot(airquality, aes(Wind, Temp)) +
stat_smooth(method = "lm", se = FALSE, aes(col = factor(Month)))
ggplot(airquality, aes(Wind, Temp, col = factor(Month))) +
stat_smooth(method = "lm", se = FALSE)
参数col可以定义在ggplot函数中,也可以定义在统计信息层中,所得结果一致,均为上图所示。
将散点图按月生成,显示不同颜色,一元线性回归线由所有数据生成:
ggplot(airquality, aes(Wind, Temp, col = factor(Month), group = 1)) +
geom_point() +
stat_smooth(method = "lm", se = FALSE)
ggplot(airquality, aes(Wind, Temp, col = factor(Month))) +
geom_point() +
stat_smooth(method = "lm", se = FALSE, aes(group = 1))
将col参数定义在ggplot函数中,并将参数group定义为1即可达到目的,group参数可以定义在ggplot函数中,也可以定义在统计信息层,所得结果一致,均为上图所示。
将group定义在统计信息层中可以在上述程序的基础上再添加一个统计信息层,该层按月生成不用颜色的一元线性回归线,并修改原统计信息层生成的回归线为黑色:
ggplot(airquality, aes(Wind, Temp, col = factor(Month))) +
geom_point() +
stat_smooth(method = "lm", se = FALSE, aes(group = 1), color = "black") +
stat_smooth(method = "lm", se = FALSE)
可以看出,按月生成的回归线的颜色是自动选择的,仅由上述程序我们无法控制改颜色。
使用RColorBrewer函数,我们可以设置使用的颜色。
library(RColorBrewer)
mycolors <- c(brewer.pal(5, "Dark2"), "black")
加载RColorBrewer包,并使用brewer.pal函数在”Dark2”调色板中选取五个颜色,第6个颜色设为黑色,将这6个颜色赋予对象mycolors。
显示从”Dark2”调色板中选取的五个颜色:
display.brewer.pal(5, "Dark2")
将上述ggplot函数的程序里的颜色设置为mycolors:
ggplot(airquality, aes(Wind, Temp, col = factor(Month))) +
geom_point() +
stat_smooth(method = "lm", se = FALSE, aes(group = 1, col = "All")) +
stat_smooth(method = "lm", se = FALSE) +
scale_color_manual("Month", values = mycolors)
在上述程序的基础上加入Facets层,按月分为不同的图,从左至右排列:
ggplot(airquality, aes(Wind, Temp, col = factor(Month))) +
geom_point() +
stat_smooth(method = "lm", se = FALSE) +
scale_color_manual("Month", values = mycolors) +
facet_grid(.~ Month)
在上述程序的基础上添加主题层,设置主题为经典主题:
ggplot(airquality, aes(Wind, Temp, col = factor(Month))) +
geom_point() +
stat_smooth(method = "lm", se = FALSE) +
scale_color_manual("Month", values = mycolors) +
facet_grid(.~ Month) +
theme_classic()