R语言ggplot2:第二章 从qplot开始入门

第2章 从qplot开始入门

目录

  • 2.1 简介
  • 2.2 数据集
  • 2.3 基本用法
  • 2.4 颜色、大小、形状和其他图形属性
  • 2.5 几何对象(平滑曲线、箱线图、扰动点图、密度图、条形图、路径图等)
  • 2.6 分面
  • 2.7 其他选项
  • 2.8 与plot函数的区别

2.1 简介

qplot的意思是快速作图(quick plot)

在一次R会话中,可以通过R的帮助命令?qplot来获取qplot()完整的参数列表

2.2 数据集

本书测试的数据集为diamonds数据集,涵盖反应钻石质量的四个“C”:克拉重量(carat),切工(cut),颜色(color)和净度(clarity),以及五个物理指标:深度(depth),钻面宽度(table),x, y, 和z。

抽取100个随机样本:

注意diamonds 数据集是存在于ggplot2中的,如果没有导入该包直接调用命令data(diamonds)会报错

data("diamonds",package="ggplot2")

library(ggplot2)
data("diamonds")
set.seed(1410)
dsmall <- diamonds[sample(nrow(diamonds),100),]

2.3 基本用法

该书推荐使用data参数,因为将相关的数据放置在同一个数据框中是一个良好的习惯。

library(ggplot2)
qplot(carat,price,data=diamonds)
image.png

竖直方向上有一些有趣的条纹,这种相关关系似乎是指数型的,做个测试

qplot(log(carat),log(price),data = diamonds)
image.png

同样,函数的参数可以是已有变量的某种组合

qplot(carat, x*y*z, data = diamonds)
image.png

2.4 颜色、大小、形状和其他图形属性

向重量和价格散点图添加颜色和切工信息,都是自动添加图例

#根据颜色进行分组
qplot(carat, price, data = dsmall, colour = color)
image.png
#根据切工进行分组
qplot(carat, price, data = dsmall, shape = cut)
image.png

同样,可以通过I()来手动设定图形属性,如color= I("red")或者 size = I(2)


image.png

对于大数据量的数据,可以通过alpha图形属性参数来设置透明度,0完全透明到1完全不透明

qplot(carat, price, data = diamonds, alpha = I(1/10))
![image.png](https://upload-images.jianshu.io/upload_images/1836425-cde38d54429bb960.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

qplot(carat, price, data = diamonds, alpha = I(1/100))
![image.png](https://upload-images.jianshu.io/upload_images/1836425-e38e598a7e887774.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

qplot(carat, price, data = diamonds, alpha = I(1/200))
image.png

2.5 几何对象

考察二维关系的几何对象
geom = "point",绘制散点图,给定x,y时的默认选择
geom = "smooth",拟合一条平滑曲线,并将曲线和标准误展示在图中
geom = "boxplot", 绘制箱线胡须图,用以概况一系列点的分布情况
geom = "path" 和 geom = "line"可以在数据点之间连线,线条图只能从左向右连线,路径图可以是任意方向
考察一维分布的几何对象
对于连续变量, geom = "histogram"绘制直方图,geom = "freqpoly"绘制频率多边形,geom = "density"绘制密度曲线。如果只传进x参数,直方图是默认选择
对于离散变量, geom = "bar" 绘制条形图

2.5.1 向图中添加平滑曲线

smooth 添加平滑曲线

利用c()函数来将多个几何对象组成一个向量传递给geom,几何对象会按照指定的顺序进行堆叠

qplot(carat, price, data = dsmall, geom = c("point", "smooth"))
## `geom_smooth()` using method = 'loess'
image.png
qplot(carat, price, data = diamonds, geom = c("point", "smooth"))
## `geom_smooth()` using method = 'gam'
image.png

利用method参数可以选择不同的平滑器:

  1. method = "loess",当n较小时是默认选项,使用的是局部回归的方法。曲线的平滑程度是由span参数控制的,其取值范围从0(很不平滑)到1(很平滑)
qplot(carat, price, data = dsmall, geom = c("point","smooth"),span = 0.2)
image.png
qplot(carat, price, data = dsmall, geom = c("point","smooth"),span = 1)
image.png

Loess 对于大数据并不十分适用,因此当n超过1000时将默认采用另一种平滑算法。

  1. 可以使用 method = "gam", formula = y ~ s(x) 来调用mgcv包拟合一个广义可加模型。对于大数据,需要使用公式 y ~ s(x, bs = "cs"),这是数据超过1000时的默认选项
library(mgcv)
qplot(carat, price, data = dsmall, geom = c("point","smooth"),method = "gam", formula = y ~ s(x))
image.png
qplot(carat, price, data = dsmall, geom = c("point","smooth"),method = "gam", formula = y ~ s(x, bs = "cs"))
image.png
  1. method = "lm", 拟合的是线性模型,默认拟合的是直线,可以通过指定formula = y ~ poly(x, 2)来拟合一个二次多项式或记载splines包以使用自然样条:fromula = y ~ ns(x, 2)。 第二个参数是自由度:自由度取值越大,曲线的波动也越大。
library(splines)
qplot(carat, price, data = dsmall, geom = c("point","smooth"), method = "lm")
image.png
qplot(carat, price, data = dsmall, geom = c("point","smooth"), method = "lm",formula = y ~ ns(x, 5))
image.png
  1. method = "rlm" 与lm类似,但采用了一种更稳健的拟合算法,使得结果对异常值不太敏感,这一方法是MASS包的一部分,因此需要先加载MASS包。

2.5.2 箱线图和扰动点图

扰动点图:geom = "jitter"

箱线胡须图:geom = "boxplot"

箱线图的信息更充分,它显示出分布的中位数和四分位数的变化,箱线图是一个更好的选择

qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/5))
image.png
qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/50))
image.png
qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/200))
image.png

对于扰动点图,qplot可以提供像一般的散点图那样对其他图形属性的控制,例如size,colour,shape,对于箱线图,可以用colour控制框线的颜色,用fill设置填充颜色,以及用size调节线的粗细。

2.5.3 直方图和密度曲线图

qplot(carat, data = diamonds, geom = "histogram")
image.png
qplot(carat, data = diamonds, geom = "density")
image.png

绘制直方图或者是密度曲线时,对平滑程度进行试验非常重要。

直方图的binwidth参数通过设定组距来调节平滑度,变动直方图的组距可以显示出有意思的模式

xlim设置只有重量在0到3 克拉之间的钻石才显示

qplot(carat, data = diamonds, geom = "histogram", binwidth = 1, xlim = c(0,3))
image.png
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.1, xlim = c(0,3))
image.png
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.01, xlim = c(0,3))

image.png

要是在不同组之间对分布进行对比,只需要再机上一个图形映射,如下图所示。

qplot(carat, data = diamonds, geom = "density", colour = color)
image.png
qplot(carat, data = diamonds, geom = "histogram", fill = color)
image.png

2.5.4 条形图

如果想用其他的方式对数据进行分组处理(例如对连续变量进行分组求和),那么你可以使用weight几何对象。

qplot(color, data = diamonds, geom = "bar")
image.png
qplot(color, data = diamonds, geom = "bar", weight = carat)+
  scale_y_continuous("carat")
image.png

2.5.5 时间序列中的线条图和路径图

线条图和路径图常用语可视化时间序列数据。

qplot(date, unemploy / pop, data = economics, geom = "line")
image.png
qplot(date, uempmed, data = economics, geom = "line")
image.png

第一张图显示了失业率的变化,第二张图是失业星期数的中位数。我们已经可以看出这两个变量之间的一些区别,例如在最后的一个峰值处,失业的比例要比前一个峰值低,但失业时间却要更长

路径图可以将邻近时点的散点连接起来,从中可以看出变量随时间的变化

year <- function(x) as.POSIXlt(x)$year + 1900
qplot(unemploy / pop, uempmed, data = economics, geom = c("point","path"))
image.png
qplot(unemploy / pop, uempmed, data = economics, geom = "path", colour = year(date))
image.png

第一张图的方向性并不明显,但是从第二张图中可以看出,两者是高度相关的,且近年来失业率和失业时间长度有明显上升

2.6 分面

分面:将数据分割为若干个子集,然后创建一个图形的矩阵,将每一个子集绘制到图形矩阵的窗格中。

..density.. 是一个新语法,告诉ggplot2将密度而不是频数映射到y轴

qplot(carat, data = diamonds, facets = color ~ ., geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
image.png
qplot(carat, ..density.., data = diamonds, facets = color ~ ., geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
image.png

2.7 其他选项

  1. xlim, ylim: 设置x轴和y轴的显示区间,例如xlim = c(0,20)或者 ylim = c(-0.9, -0.5)

  2. log:一个字符型向量,说明哪个坐标轴应该取对数,例如,log= "x" 表示对x轴取对数,log = "xy"表示对y轴和x轴都取对数

  3. main: 图形的主标题,放置在图形的顶端中部,字符串或者是数学表达式

  4. xlab, ylab: 设置x轴和y轴的标签文字


qplot(
  carat, price, data = dsmall,
  xlab = "Price ($) ", ylab = "Weight (carats)",
  main = "Price - weight relationship"
)
image.png
qplot(
  carat, price / carat, data = dsmall,
  xlab = expression(frac(price, carat)), 
  ylab = "Weight (carats)",
  main = "Small diamonds",
  xlim = c(.2,1)
)
image.png
qplot(carat, price, data = dsmall, log = "xy")
image.png

2.8 与plot函数的区别

  1. qplot不是泛型函数(autoplot),即不同类型的R对象传入qplot时,它并不会匹配默认的函数调用,而ggplot2是泛型函数

  2. 将感兴趣的变量进行标度转换

  3. ggplot2的图形属性名称 colour size shape更容易记忆

  4. 在基础绘图系统中,可以通过points(),lines(),text()函数来向已有图形中添加更多元素,而在ggplot2中则需要加入额外的图层

本章完结~

你可能感兴趣的:(R语言ggplot2:第二章 从qplot开始入门)