首页 > 代码库 > R数据可视化第一蛋之qplot()

R数据可视化第一蛋之qplot()

ggplot2之快速作图qplot()

qplot()的意思是快速作图,利用它可以很方便的创建各种复杂的图形,其他系统需要好几行代码才能解决的问题,用qplot只需要一行就能完成。

本篇主要介绍:

  • qplot()的基本用法
  • 如何将变量映射到图形属性上(如大小、颜色和形状等)
  • 如何通过指定不同的几何对象来创建不同类型的图形,以及如何将他们组合在一张图中
  • 分面的应用,将数据拆分子集

1.数据集

首先我们示例使用的数据集是R自带的diamonds数据集,包含54000颗钻石的价格和质量信息。

技术分享

我们同时使用一个小数据集dsmall,它是原始数据一个容量为100的随机样本,我们用这个数据集进行小数据的作图展示。

 >set.seed(123)#让样本可重复
> dsmall <- diamonds[sample(nrow(diamonds),100),]
 

2.基本用法

qplot()的前两个参数是x和y,分别代表所画对象的x坐标和y坐标,还有一个可选的data参数,如果进行指定,那么qplot()会首先在的数据框中查找变量名,然后再到R的工作空间中进行搜索。

下面是使用qplot()的一个简单例子:

>qplot(carat,price,data=http://www.mamicode.com/diamonds)>

  技术分享

这张图显示了变量之间很强的相关关系,以及一些明显的异常值,这些关系似乎是指数型的,我们接下来对变量进行一些变换:

> qplot(log(carat),log(price),data=http://www.mamicode.com/diamonds)>

  技术分享

现在这种关系就接近线性了,由于图中的元素有很大的重叠,下结论时需要谨慎。如果我们研究体积(X*Y*Z)和其重量之间的关系,我们可以这样:

> qplot(carat,x*y*z,data=http://www.mamicode.com/diamonds)>

  技术分享

我们可以看到,大部分的钻石都落在同一条直线上,但依然存在一些大的异常点。钻石的密度应该是一个常数,所以体积和重量之间应该是线性关系。

3.颜色、大小、形状和其他属性

我们在重量和价格的散点图添加颜色和切工信息。

> qplot(carat,price,data=http://www.mamicode.com/dsmall,colour=color)>

  技术分享

> qplot(carat,price,data=http://www.mamicode.com/dsmall,shape=cut)  #形状切工>

  技术分享

颜色大小和形状都是图形属性的具体例子,他们都是影响数据如何进行展示的视觉属性。

使用半透明的颜色可以有效减少图形元素重叠的现象,要创建半透明的颜色,可以使用alpha图形属性,其值从0(完全透明)到1(完全不透明)

>qplot(carat,price,data=http://www.mamicode.com/diamonds,alpha=I(1/10))>

  技术分享技术分享

不同类型的变量有不同适用的图形属性。例如,颜色和形状适用于分类变量,而大小适用于连续变量。

4.几何对象

4.1向图形中添加平滑曲线

通过改变几何对象(简写为geom),它几乎可以画出任何一种类型的图形。下面这些几何对象适用于考察二维的变量关系:

  • geom = "point"可以绘制散点图,这是当指定了x和y 参数给qplot的默认设置
  • geom = "smooth"将拟合一条平滑曲线,并将曲线和标准误差展现在图中。
  • geom = "boxplot"可以绘制箱线图
  • geom = "path"和geom="line"可以在数据点之间绘制连线,这类图传统的作用是探索时间和其他变量之间的关系。

对于一维分布,几何对象的选择是由变量的类型指定:

  • 对于连续变量,geom = "histogram"绘制直方图,geom="freqploy"绘制频率多边形,geom="density"绘制密度曲线。
  • 对于离散变量,geom="bar"用来绘制条形图。

如果在散点图中有非常多的数据点,那么数据展示的趋势可能并不明显,在这种情况下应该在图中添加一条平滑曲线,我们用c()将多个几何对象组成一个向量传递给geom.

几何对象会按照指定的顺序进行堆叠。

> qplot(carat,price,data=http://www.mamicode.com/dsmall,geom=c("point","smooth"))

  技术分享

灰色区域表示逐点的置信区间。

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

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

  技术分享技术分享

4.2箱线图和扰动点图

如果数据集中包含了一个分类变量和一个或多个连续变量,连续变量会如何随着分类变量水平的变化而变化呢?箱线图和扰动点图提供了各自的方法达到这个目的。

> qplot(color,price/carat,data=http://www.mamicode.com/diamonds,geom="jitter",alpha=I(1/5))
> qplot(color,price/carat,data=http://www.mamicode.com/diamonds,geom="jitter",alpha=I(1/50))

  技术分享技术分享

上面扰动点图的重叠问题可以用半透明颜色来解决。

> qplot(color,price/carat,data=http://www.mamicode.com/diamonds,geom="boxplot")

  技术分享

箱线图显示了分布的中位数和四分位数都没有太大的变化。

4.3直方图和密度曲线图

直方图和密度曲线图可以展示单个变量的分布,相对于箱线图而言,它们提供了更多关于单个分布的信息,但不利于在不同组之间比较。

下图展示了钻石重量的直方图和密度曲线图:

> qplot(carat,data=http://www.mamicode.com/diamonds,geom="histogram")
> qplot(carat,data=http://www.mamicode.com/diamonds,geom="density")

  技术分享技术分享

adjust控制密度曲线的平滑程度(取值越大越平滑),binwidth参数控制直方图的组距,组距较小显示更多细节,组距较大反应总体特征。

> qplot(carat,data=http://www.mamicode.com/diamonds,geom="histogram",binwidth=1,xlim=c(0,3))
> qplot(carat,data=http://www.mamicode.com/diamonds,geom="histogram",binwidth=0.1,xlim=c(0,3))

  技术分享技术分享

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

> qplot(carat,data=http://www.mamicode.com/diamonds,geom="density",colour=color)
> qplot(carat,data=http://www.mamicode.com/diamonds,geom="histogram",fill=color)

  技术分享技术分享

4.4条形图

在离散变量的情形下,条形图和直方图类似,绘制方法是geom="bar"

> qplot(color,data=http://www.mamicode.com/diamonds,geom="bar")

  技术分享

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

线条图是将点从左到右进行连接,而路径图则按照点在数据集中的顺序对其进行连接。

由于diamonds中没有包含时间变量,我们这里使用economics数据集,它包含美国过去40年的经济数据。

下图展示了失业率随时间变化的线条图:

> qplot(date,unemploy/pop,data=http://www.mamicode.com/economics,geom="line")

技术分享

我们将年份映射到属性colour上,更容易看清时间的行进方向。

> year <- function(x) as.POSIXlt(x)$year +1900
>plot(unemploy/pop,uempmed,data=http://www.mamicode.com/economics,geom="path",colour=year(date))

  技术分享

5.分面

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

qplot()中默认分面方法是将图形拆分成若干窗格,可以通过形如raw_var~col_var来指定。

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

>qplot(carat,..density..,data=http://www.mamicode.com/diamonds,facets=color~.,geom="histogram",binwidth=0.1,xlim=c(0,3))

  技术分享

6.其他选项

qplot()中还有一些其他选项用于控制图形外观。

  • xlim,ylim:设置x轴和y轴的显示区间,例如xlim=c(0,20)
  • log:对变量的对数操作
  • main:图形的主标题,以大字号显示
  • xlab,ylab:设置x轴和y轴的标签文字
> qplot(
+ carat,price,data=http://www.mamicode.com/dsmall,"Price ($)",ylab="Weight (carats)",
+ main = "Price-wight relationship")

  技术分享

 

 原创文章,转载请注明出处!

 

R数据可视化第一蛋之qplot()