ggplot2:数据分析与图形艺术 学习笔记02---第二章 从qplot开始入门

浏览: 2444

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

Clipboard Image.png

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))

Clipboard Image.pngClipboard Image.pngClipboard Image.png


要在不同组之间对分布进行比较,只需要再加上一个图形映射

qplot(carat,data = dsmall,geom = "density",colour = color)
qplot(carat,data = dsmall,geom = "histogram",fill = color)

Clipboard Image.pngClipboard Image.png


2.5.4 条形图

qplot(color,data = dsmall,geom = "bar")

按重量加权

qplot(color,data = dsmall,geom = "bar",weight = carat) + scale_y_continuous("carat")

Clipboard Image.pngClipboard Image.png


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

使用了 economics数据集,包含了美国过去40年的经济数据

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

Clipboard Image.pngClipboard Image.png


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))

Clipboard Image.pngClipboard Image.png


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,向已有的图形添加元素,需要在当前图形中加入额外的图层。

推荐 0
本文由 Parlan怕冷 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册