ggplot2学习笔记3:ggplot()基本用法

此博客作为自己的学习笔记,同时与大家交流分享!

Getting Started with ggplot2

首先明确一下ggplot()画出的图所具备的要素

  1. 数据:必须以数据框的形式作为参数
  2. 映射:呈现数据与视觉变量之间的关系(aesthetic mappings)
  3. 图层:展现数据可视化结果(geom()函数)

举例

利用qplot()小试牛刀一下,画一个以气缸数(cyl)分类的发动机排量(displ)和高速公路每加仑行驶的英里数(hwy)的散点图。

library(gglpot2)  #加载包
mpg
summary(mpg)
qplot(displ, hwy, data = mpg)

生成图片

ggplot2学习笔记3:ggplot()基本用法_第1张图片
思考一下,用ggplot()怎么画上面的图呢

ggplot(mpg, aes(x = displ, y = hwy)) +
  geom_point()  #结果和上面那幅图一毛一样

通过对比发现两个函数的调用结构是不一样的,ggplot()参数中数据集mpg是第一个参数,映射函数aes()为第二个参数,即xy坐标轴对应的数据,散点图由添加图层的形式给出,即+,如果没有几何对象充当图层,输出结果就只是一张画布,不完整;三个要素都齐了,大功告成!

设定图形的大小、颜色和形状

图形属性有两个作用,首先可以使图形好看高大上,大家都可以理解;其次可以对不同的分组进行比较。

作用一:好看高大上

对于改善图表外观只需要对几何对象进行参数设置,也就是对图层进行参数设置,我们用图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)  #蓝色,上三角形

生成图片

ggplot2学习笔记3:ggplot()基本用法_第2张图片

作用二:分组

图形的颜色、大小和形状等都是给绘图添加的额外变量,即标度(scale),如果添加在函数aes()的参数中,则表示根据参数coloursizeshape的对象进行分组,而不同的分组用不同的coloursizeshape呈现,如:

  • aes(displ, hwy, colour = class)
  • aes(displ, hwy, shape = drv)
  • aes(displ, hwy, size = cyl)

还拿图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()  #用不同的大小对连续变量年份进行分类

生成图片:

ggplot2学习笔记3:ggplot()基本用法_第3张图片
还需要注意一点对于参数shape的对象必须是字符型,也就是必须为分类变量,而根据实际情况cyl表示汽车气缸数也确实为分类变量,fator(x)是将数值型数据转化为字符型数据。

分面(Facetting)

分面是比较不同分组的另一种方法:可以将数据分割成若干子集,然后创建一个图形矩阵,将每个子集绘制到图形矩阵的窗格中。

对于qplot()ggplot()进行分面操作时,参数设置是有所不同的。

qplot()facets的表达形式为row_var ~ col_var进行指定,而. ~ year表示年份按行排开,通过画图很好理解,可以再做一个year ~ .
+则表示往原来的散点图上再叠加一张拟合的曲线图,所以很好理解,上面的那幅图有两个图层

qplot(displ, hwy, data = mpg, facets = . ~ year) + geom_smooth()

生成图片

ggplot2学习笔记3:ggplot()基本用法_第4张图片
使用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)

生成图片:ggplot2学习笔记3:ggplot()基本用法_第5张图片

数据结构(data structure)

对于一个数据集我们可以用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

你可能感兴趣的:(R语言可视化)