2.1 简介
qplot() 将是学习的第一个ggplot()作图函数,qplot的意思是快速作图(quick plot)
qplot() 被设计的与plot() 很像。
可以通过帮助命令 ?qplot来获取 完整参数列表。
2.2 数据集
diamonds 数据集包含了54000颗钻石的价格和质量的信息,数据已经放在ggplot()软件包。
数据涵盖反映钻石质量的四个“C” carat(克拉),cut(切工),color(颜色)和 clarity(净度)
以及五个物理指标:depth(深度),table(钻面宽度),x,y和z
library(ggplot2)
?diamonds
dim(diamonds)
str(diamonds)
head(diamonds)
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
我们使用一个1000的随机样本dsmall,用这个数据集进行小数据的作图展示
set.seed(1234)
dsmall <- diamonds[sample(nrow(diamonds),1000),]
# set.seed() 用于设定随机数种子,一个特定的种子可以产生一个特定的伪随机序列
# 这个函数的主要目的,是让你的模拟能够可重复出现
2.3 基本用法
qplot(carat,price,data = dsmall)
qplot(log(carat),log(price),data = dsmall)
qplot(carat,x*y*z,data = dsmall)
2.4 颜色、大小、形状和其他图形属性
qplot(carat,price,data = dsmall,colour = color)
qplot(carat,price,data = dsmall,shape = cut)
颜色、大小和形状是 图形属性的具体例子,它们都是影响数据如何进行展示的视觉属性。
每个图形属性都对应了一个称为 标度的函数,其作用是将数据的取值映射到该图形属性的有效取值。
qplot(carat,price,data = dsmall,alpha = I(1/10))
qplot(carat,price,data = dsmall,alpha = I(1/100))
对于大数据而言,使用半透明的颜色可以有效减轻图形元素重叠的现象。
可以使用alpha图形属性,调节透明度,取值为[0,1]
2.5 几何对象
下面这些几何对象适用于考察二维的变量关系
geom = "point" 绘制散点图,这是你指定了x和y参数给qplot() 时默认的设置
geom = "smooth" 拟合一条平滑曲线,并将曲线和标准误差展示在图中
geom = "boxplot" 绘制箱线图,用以概括一系列点的分布情况
geom = "path" geom = "line",可以在数据点之间绘制连线,传统作用是探索时间和其他变量之间的关系
对于一维的分布,几何对象的选择是由变量的类型指定的
对于连续型变量:
geom = "histogram" 直方图
geom = "freqpoly“ 频率多边形
geom = "density" 密度曲线
# 如果只有x参数传递给qplot(),那么直方图就是默认选择
对于离散变量
geom = “bar" 条形图
2.5.1 向图中添加平滑曲线
qplot(carat,price,data = dsmall,geom = c("point","smooth"))
如果不想绘制标准误差,可以使用 se = FALSE
利用 method参数,可以选择许多不同的平滑器
method = "loess" , 当n较小时是默认选项,使用的是局部回归的方法。
曲线的平滑程度是由span参数控制的,取值范围[0,1](很不平滑,很平滑)
qplot(carat,price,data = dsmall,geom = c("point","smooth"),method = "loess",span = 0.2)
qplot(carat,price,data = dsmall,geom = c("point","smooth"),method = "loess",span = 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))
qplot(carat,price,data = dsmall,geom = c("point","smooth"),method = "gam",formula = y ~s(x,bs = "cs"))
method = "lm" 拟合的是线性模型
默认情况下会拟合一条直线,但可以通过formula = y ~poly(x,2) 来拟合一个二次多元式
或加载splines包,使用自然样条:formula = y ~ns(x,2)
library(splines)
qplot(carat,price,data = dsmall,geom = c("point","smooth"),method = "lm")
qplot(carat,price,data = dsmall,geom = c("point","smooth"),method = "lm",formula = y ~poly(x,3))
qplot(carat,price,data = dsmall,geom = c("point","smooth"),method = "lm",formula = y ~ns(x,10))
method = "rlm" 与lm类似,但采用了一种更稳健的拟合算法,使得结果对异常值不太敏感,需要加载MASS包
2.5.2 箱线图和扰动点图
如果一个数据集中包含一个分类变量和一个或多个连续变量
连续变量会如何随着分类变量水平的变化而变化?
qplot(color,price/carat,data = dsmall,geom = "jitter")
qplot(color,price/carat,data = dsmall,geom = "boxplot")
重叠问题可以使用透明化解决
qplot(color,price/carat,data = dsmall,geom = "jitter",alpha = I(1/5))
2.5.3 直方图和密度曲线图
qplot(carat,data = dsmall,geom = "histogram")
qplot(carat,data = dsmall,geom = "density")
对于密度曲线图,adjust参数控制曲线的平滑程度
对于直方图,binwidth参数通过设定组距来调节平滑度
qplot(carat,data = dsmall,geom = "histogram",binwidth = 0.5,xlim = c(0,3))
qplot(carat,data = dsmall,geom = "histogram",binwidth = 0.1,xlim = c(0,3))
qplot(carat,data = dsmall,geom = "histogram",binwidth = 0.01,xlim = c(0,3))
要在不同组之间对分布进行比较,只需要再加上一个图形映射
qplot(carat,data = dsmall,geom = "density",colour = color)
qplot(carat,data = dsmall,geom = "histogram",fill = color)
2.5.4 条形图
qplot(color,data = dsmall,geom = "bar")
按重量加权
qplot(color,data = dsmall,geom = "bar",weight = carat) + scale_y_continuous("carat")
2.5.5 时间序列中的线条图和路径图
使用了 economics数据集,包含了美国过去40年的经济数据
qplot(date,unemploy/pop,data = economics,geom = "line")
qplot(date,uempmed,data = economics,geom = "line")
2.6 分面
利用图形属性(颜色和形状)来比较不同分组,将所有的组绘制在同一张图中
分面是另外一种实现方式,将数据分割成若干子集,然后创建一个图形矩阵
如果只想指定一行或一列,可以使用.作为占位符,例如 row_var~. 创建一个单列多行的图形矩阵
..density.. 告诉ggplot2将密度而不是频数映射到y轴
qplot(carat,data = dsmall,facets = color ~.,geom = "histogram",binwidth = 0.1,xlim = c(0,3))
qplot(carat,..density..,data = dsmall,facets = color ~.,geom = "histogram",binwidth = 0.1,xlim = c(0,3))
2.7 其他选项
xlim,ylim 设置x轴和y轴的显示区间
log 说明哪个坐标轴应该取 对数
main 图形的主标题
xlab,ylab 设置x轴和y轴的标签文字
qplot(carat,price,data = dsmall,xlab = "Price($)",ylab = "Weight(carats)",main = "Price-Weight")
qplot(carat,price/carat,data = dsmall,ylab = expression(frac(price,carat)),xlab = "Weight",main = "Small Diamonds",xlim = c(.2,1))
qplot(carat,price,data = dsmall,log = "xy")
2.8 与plot函数的区别
qplot不是泛型函数,将不同类型的R对象传入qplot时,它并不会匹配默认的函数调用
一般而言,可以将一个变量传递给你感兴趣的图形属性,这样该变量将进行标度转换并显示在图例上
ggplot2中的图形属性名称(如colour,shape,size)比基础绘图系统中的名称(如col,pch,cex)更直观,容易记忆
ggplot2,向已有的图形添加元素,需要在当前图形中加入额外的图层。