2.1 简介

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

qplot是一种快捷方式,如果您已习惯于使用基础plot(),则可以使用它。它可以使用一致的调用模式快速创建许多不同类型的图。

qplot(x, y, ..., data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = NULL, ylab = NULL, asp = NA, stat = NULL, position = NULL)

  • x,y:图中对象的x坐标和y坐标;
  • data:可选,用于指定数据框,若进行了指定,那么函数会首先在该数据框内查找变量名,如果没有指定,将创建一个,从当前环境中提取向量;
  • facets:用于图形分面;
  • margins:逻辑值或字符向量。margins是附加的面;
  • geom:指定绘图类型的字符向量。如果指定x和y,默认为“点”;如果指定x,默认为“柱状图”;
  • xlim,ylim:x和y坐标边界;
  • log:哪些变量要进行对数转换(“x”、“y”或“xy”);
  • main:标题;
  • xlab,ylab:x和y坐标轴标签;
  • asp:y/x的长宽比。

2.2 数据集

  1. > head(diamonds)
  2. # A tibble: 6 x 10
  3. carat cut color clarity depth table price x y z
  4. <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
  5. 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
  6. 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
  7. 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
  8. 4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63
  9. 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
  10. 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48

A dataset containing the prices and other attributes of almost 54,000 diamonds. The variables are as follows:

  • price: price in US dollars (\$326–\$18,823)
  • carat: weight of the diamond (0.2–5.01)
  • cut: quality of the cut (Fair, Good, Very Good, Premium, Ideal)(均匀、良好、非常好、优质、理想)
  • color: diamond colour, from D (best) to J (worst)
  • clarity: a measurement of how clear the diamond is (I1 (worst), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (best))
  • x: length in mm (0–10.74)
  • y: width in mm (0–58.9)
  • z: depth in mm (0–31.8)
  • depth: total depth percentage = z / mean(x, y) = 2 * z / (x + y) (43–79)
  • table: width of top of diamond relative to widest point (43–95)
  1. > str(diamonds)
  2. Classes tbl_df’, tbl and 'data.frame': 53940 obs. of 10 variables:
  3. $ carat : num 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
  4. $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
  5. $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
  6. $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
  7. $ depth : num 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
  8. $ table : num 55 61 65 58 58 57 57 55 61 61 ...
  9. $ price : int 326 326 327 334 335 336 336 337 337 338 ...
  10. $ x : num 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
  11. $ y : num 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
  12. $ z : num 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...

可以看到cut、color、clarity为有序分类变量。

抽样:(方便观察,加快运算速度)

  1. set.seed(1410) # 让样本可重复
  2.  
  3. dsmall <- diamonds[sample(nrow(diamonds), 100), ]

2.3 基本用法

绘制散点图。

  1. qplot(carat, price, data = diamonds)

对数变换(对坐标系进行变换,并没有改变变量的值)。

  1. qplot(carat, price, data = diamonds, log = 'xy')

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

自动向重量和价格的散点图中添加颜色和切工的信息。

  1. qplot(carat, price, data = dsmall, colour = color)
  2.  
  3. qplot(carat, price, data = dsmall, shape = cut)


不透明度选择,在数据量很大时,太多的点重合,影响观察,使用半透明的颜色可以有效减轻图形元素重叠的现象,观察数据集聚趋势,alpha值可以设定不透明度,取值从0(完全透明)到1(完全不透明),通常用分数来表示,例如1/10或1/20,其分母表示经过多少次重叠之后颜色将变得不透明。

  1. qplot(carat, price, data = diamonds, log = 'xy', alpha = I(1/10))

  1. qplot(carat, price, data = diamonds, colour = color, alpha = I(1/5))

2.5 几何对象

二维对象:

  • geom = "point":绘制散点图;
  • geom = "smooth":拟合一条平滑曲线,并将标准误展示在图中,如果不需要展现标准误可以使用se = FALSE;
  • geom = "boxplot":绘制箱线图,用以概括一系列点的分布情况;
  • geom = "jitter":绘制扰动点图;
  • geom = "path"或geom = "line":可以在数据点之间绘制连线,这类图形的作用是探索时间和其他变量之间的关系,但连线同样可以用其他的方式将数据点连接起来,线条图只能创建从左到右的连线,而路径图则可以使任意的方向。

一维对象:

  • geom = "histogram":绘制直方图;
  • geom = "freqpoly":绘制频率多边形;
  • geom = "density":绘制密度曲线;
  • geom = "bar:对离散变量绘制条形图。

2.5.1 向图中添加平滑曲线

使用c()将多个对象传递给geom,几何对象会按照指定的顺序进行堆叠。

  1. qplot(carat, price, data = dsmall, geom = c("point", "smooth"))

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

  • method = "loess"使用的是局部回归方法,在当n较小是是默认选项,其平滑程度由span控制,取值范围为0(很不平滑)到1(很平滑)。Loess对于大数据并不合适,因为其内存消耗是$O(n^{2})$。
  • 使用method = "gam", formula = y ~ s(x)可以调用mgcv包拟合一个广义可加模型。对于大数据应使用y ~ s(x, bs = "cs")。
  1. library(mgcv)
  2. qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "gam", formula = y ~ s(x))

  • method = "lm"拟合的是线性模型,默认得到一条直线,但可以通过formula = y ~ poly(x, 2)来拟合一个二次多项式。
  1. qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "lm")

  • method = "rlm"与"lm"类似,但采用了一种更为稳健的拟合方法,使得结果对异常值不太敏感,这一方法是MASS包的一部分,因此使用时需要先加载MASS包。

2.5.2 箱线图和扰动点图

  1. qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/30))
  2. qplot(color, price/carat, data = diamonds, geom = "boxplot")

每种方法都有它的优势和不足,箱线图只用了5个数字进行描述,更具概括性;扰动点图绘制了全部点,更具全面性。

2.5.3 直方图和密度曲线图

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

  1. qplot(carat, data = diamonds, geom = "histogram")
  2. qplot(carat, data = diamonds, geom = "density")

对于密度曲线而言,adjust参数控制了曲线的平滑程度(adjust取值越大,曲线越平滑);对于直方图,binwidth参数通过设置组距来调节平滑度,或者也可以使用breaks对切分位置进行显示的指定。

在直方图中,应当尝试多种组距:组距较大时图形能够反应总体特性;组距较小时,则能显示出更过细节。

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

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

密度曲线图似乎更吸引人,因为很容易阅读,而且适于在不同的曲线之间进行比较。然而要真正理解密度曲线则比较困难,而且密度曲线有一些隐含的假设,例如曲线应该是无界、连续和平滑的,这些假设不一定适用于真实的数据。

2.5.4 条形图

用于绘制离散变量,与直方图类似。条形图会计算每一个水平下观测的数量。使用weight可以进行加权。

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

第一幅图展现了分组的计数,第二幅图展现了没中颜色钻石的总重量。

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

线条图和路径图用于可视化时间序列数据。线条图将点从左到右进行连接,而路径图则按照点在数据集中的顺序进行连接。线条图的x轴一般是时间,它展现了单个变量随时间的变化情况;路径图则展现了两个变量随时间联动的情况,时间反映在点的连接顺序上。

数据集:economics

  1. > head(economics)
  2. # A tibble: 6 x 6
  3. date pce pop psavert uempmed unemploy
  4. <date> <dbl> <dbl> <dbl> <dbl> <dbl>
  5. 1 1967-07-01 507. 198712 12.6 4.5 2944
  6. 2 1967-08-01 510. 198911 12.6 4.7 2945
  7. 3 1967-09-01 516. 199113 11.9 4.6 2958
  8. 4 1967-10-01 512. 199311 12.9 4.9 3143
  9. 5 1967-11-01 517. 199498 12.8 4.7 3066
  10. 6 1967-12-01 525. 199657 11.8 4.8 3018

该数据集来自美国经济时间序列数据。

  • date:数据收集月份
  • psavert:个人储蓄率
  • pce:个人消费支出
  • unemploy:失业人数(以千计)
  • uempmed:失业持续时间的中位数,以周为单位。
  • pop:总人口,以千为单位

绘制时间序列线条图。(失业率)

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

绘制路径图(失业率&失业持续时间)。将时间date映射到colour属性上更容易看出时间的行进方向。

  1. qplot(unemploy/pop, uempmed, data = economics, geom = c("point", "path"), colour = date)

2.6 分面

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

通过row_var ~ col_var的表达式进行指定,如果指向指定一行或者一列,可以使用 . 作为占位符。

  1. qplot(carat, data = diamonds, facets = color ~ ., geom = "histogram", binwidth = 0.1,
  2. xlim = c(0, 3))
  3.  
  4. qplot(carat, ..density.., data = diamonds, facets = color ~ cut, geom = "histogram",
  5. binwidth = 0.1, xlim = c(0, 3))

..density..告诉ggplot2将密度而不是频数映射到y轴。

2.7 与plot函数的区别

  • qplot不是泛型函数,当将不同类型的R对象传入qplot时,它并不会自动匹配默认的函数调用。ggplot()是一个泛型函数;
  • gglpot2中的图形属性名称如colour、shape和size等比基础绘图系统中的名称如col、pch、cex等更直观,容易记忆;
  • 在基础绘图系统中,可以通过points()、lines()和text()函数来向已有的图形中添加更多的元素,而在ggplot2中,你需要在当前的图形中加入额外的图层。

总结

ggplot2(2) 从qplot开始入门的更多相关文章

  1. ggplot2作图详解:入门函数qplot

    ggplot2作图详解:入门函数qplot   ggplot2的功能不用我们做广告,因为它的作者Hadley Wickham就说ggplot2是一个强大的作图工具,它可以让你不受现有图形类型的限制,创 ...

  2. ggplot2(11) 总结回顾&案例练习

    从2020年2月20到2月27日,3月13日到2020年3月16日,学习了ggplot2:数据分析与图形艺术(哈德利·威克姆 著 统计之都 译),历时12天.另外,3月6日到3月9日参加了美赛,也用到 ...

  3. (数据科学学习手札37)ggplot2基本绘图语法介绍

    一.简介 ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架:ggplot2的作者是现任Rstu ...

  4. 《ggplot2:数据分析与图形艺术》,读书笔记

    第1章 简介 1.3图形的语法 第2章从qplot开始入门 1.基本用法:qplot(x,y,data) x是自变量横轴,y是因变量纵轴,data是数据框   2.图形参数 colour=I(&quo ...

  5. R语言与医学统计图形-【9】过渡函数qplot

    ggplot2绘图系统 基础绘图包向ggplot2过渡--qplot 绘图理念的不同: 基础绘图包是先铺好画布,再在这张画布上作图(常规思维): ggplot2打破常规,采用图层叠加的方法. qplo ...

  6. R实战 第七篇:网格(grid)

    grid包是R底层的图形系统,可以绘制几乎所有的图形.除了绘制图形之外,grid包还能对图形进行布局.在绘图时,有时候会遇到这样一种情景,客户想把多个代表不同KPI的图形分布到同一个画布(Page)上 ...

  7. R语言函数总结(转)

    R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字符不允许是数字. 基本命令要么是表达 ...

  8. 【R笔记】R语言函数总结

    R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字 ...

  9. R语言笔记完整版

    [R笔记]R语言函数总结   R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头, ...

随机推荐

  1. Java 线程总结(十四)

    1.在异步任务进程中,一种常见的场景是,主线程提交多个异步任务,然后希望有任务完成就处理结果,并且按任务完成顺序逐个处理,对于这种场景,Java 并发包提供了一个方便的方法,使用 Completion ...

  2. OpenCV 基本的阈值操作

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...

  3. Golang Interface 解析

    转自 https://zhuanlan.zhihu.com/p/27652856 先看一段代码: 123456789101112 func (x interface{}) { if x == nil ...

  4. 2018湖南省赛B题“2018”

    题面懒得敲了,反正看这篇博客的肯定知道题面. 比赛时想按约数的一些性质分情况讨论出公式然后在合并,结果单考虑矩阵里出现2018和1009(与2互质,1009出现次数等于2)出现的情况就写了一长串公式, ...

  5. mysql报错2003 ,can't connect to mysql server on “localhost”

    我在安装成功后启动MySQL服务时,服务启动不了,提示:MySQL服务无法启动    服务没有报告任何错误 请键入NET HELPMSG 3534 以获得更多帮助,如下: 解决方案:安装好MySQL后 ...

  6. IOUtils和FileUtils的学习笔记

    pom文件导入依赖import org.apache.commons.io.FileUtils; <dependency> <groupId>commons-io</gr ...

  7. HttpClient-get请求/Post请求/Post-Json/Header

    1.Pom文件添加httpClient 依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> & ...

  8. LG_2869_[USACO07DEC]美食的食草动物Gourmet Grazers

    题目描述 Like so many others, the cows have developed very haughty tastes and will no longer graze on ju ...

  9. Mybatis--Statement Builders

    SelectBuilder 的秘密 SelectBuilder 类并不神奇, 如果你不了解它的工作机制也不会有什么好的作用. 别犹豫, 让我们来看看它是怎么工作的. SelectBuilder 使用了 ...

  10. Django ORM必会13条之外的查询方法

    基于双下划线的查询 # 价格 大于 小于 大于等于 小于等于 filter(price__gt=') # 筛选出大于90 filter(price__lt=') # 筛选出小于90 filter(pr ...