此博客作为自己的学习笔记,同时与大家交流分享!
首先明确一下ggplot()
画出的图所具备的要素
geom()
函数)举例
利用qplot()小试牛刀一下,画一个以气缸数(cyl
)分类的发动机排量(displ
)和高速公路每加仑行驶的英里数(hwy
)的散点图。
library(gglpot2) #加载包
mpg
summary(mpg)
qplot(displ, hwy, data = mpg)
生成图片
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() #结果和上面那幅图一毛一样
通过对比发现两个函数的调用结构是不一样的,ggplot()
参数中数据集mpg
是第一个参数,映射函数aes()
为第二个参数,即x
、y
坐标轴对应的数据,散点图由添加图层的形式给出,即+
,如果没有几何对象充当图层,输出结果就只是一张画布,不完整;三个要素都齐了,大功告成!
图形属性有两个作用,首先可以使图形好看高大上,大家都可以理解;其次可以对不同的分组进行比较。
对于改善图表外观只需要对几何对象进行参数设置,也就是对图层进行参数设置,我们用图1来说明
colour
,有两种形式colour = "#0000FF"
或者colour = I("blue")
。“#0000FF”
为蓝色的16进制颜色编码,或者使用I()函数封装的颜色名称来实现。size
,如size = 2
,数字越大点越大shape
,如shape = 24
,1-25代表不同的形状p <- ggplot(mpg, aes(displ, hwy)) #aes()中的前两个参数默认为x轴,y轴的映射,可以省略
p + geom_point(colour = "#0000FF", size = 2, shape = 15) #蓝色,小正方形
p + geom_point(colour = I("blue"), size = 3, shape = 24) #蓝色,上三角形
生成图片
图形的颜色、大小和形状等都是给绘图添加的额外变量,即标度(scale
),如果添加在函数aes()
的参数中,则表示根据参数colour
、size
、shape
的对象进行分组,而不同的分组用不同的colour
、size
或shape
呈现,如:
还拿图1来说,在aes()
中增加参数,不同的分组会有不同的呈现,此时ggplot2会自动生成一个图例,来看脚本
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point() #用不同的颜色对分类变量class进行分类
ggplot(mpg, aes(displ, hwy, shape = factor(cyl))) +
geom_point() #用不同的形状对不同气缸数的汽车进行分类
ggplot(mpg, aes(displ, hwy, size = year)) +
geom_point() #用不同的大小对连续变量年份进行分类
生成图片:
还需要注意一点对于参数shape
的对象必须是字符型,也就是必须为分类变量,而根据实际情况cyl
表示汽车气缸数也确实为分类变量,fator(x)
是将数值型数据转化为字符型数据。
分面是比较不同分组的另一种方法:可以将数据分割成若干子集,然后创建一个图形矩阵,将每个子集绘制到图形矩阵的窗格中。
对于qplot()
与ggplot()
进行分面操作时,参数设置是有所不同的。
qplot()
中facets
的表达形式为row_var
~ col_var
进行指定,而. ~ year
表示年份按行排开,通过画图很好理解,可以再做一个year ~ .
而+
则表示往原来的散点图上再叠加一张拟合的曲线图,所以很好理解,上面的那幅图有两个图层
qplot(displ, hwy, data = mpg, facets = . ~ year) + geom_smooth()
生成图片
使用ggplot()
函数画上面图,通过facet_grid()
函数用来添加分面,脚本如下:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_smooth() +
facet_grid(. ~ year)
也可以使用facet_wrap()
函数来添加分面,示例如下:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_smooth() +
facet_wrap(. ~ class)
对于一个数据集我们可以用summary()
函数来查看它的结构,对于一幅可视化图标也可以用summary()
函数来查看它的属性参数,脚本如下:
mpg
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point()
summary(p)
data: manufacturer, model, displ, year, cyl, trans, drv, cty, hwy, fl, class [234x11]
mapping: x = ~displ, y = ~hwy
faceting: <ggproto object: Class FacetWrap, Facet, gg>
compute_layout: function
draw_back: function
draw_front: function
draw_labels: function
draw_panels: function
finish_data: function
init_scales: function
map_data: function
params: list
setup_data: function
setup_params: function
shrink: TRUE
train_scales: function
vars: function
super: <ggproto object: Class FacetWrap, Facet, gg>
-----------------------------------
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity
geom_smooth: na.rm = FALSE, se = TRUE
stat_smooth: na.rm = FALSE, se = TRUE, method = auto, formula = y ~ x
position_identity
保存以及读入图片,脚本如下:
#保存图形
save(p, file = "plot.rdata")
#读入图形
load("plot.rdata")
#将图片保存为png格式
ggsave("plot.png", width = 5, height = 5)
往期笔记
- ggplot2学习笔记1:从qplot()开始
- ggplot2学习笔记2:ggplot()语法基础
参考资料:
- 书籍:《ggplot2:数据分析与图形艺术》
- Hadley Wickham(2016). ggplot2. Springer International Publishing. doi: 10.1007/978-3-319-24277-4