ggplot2已经成为了R语言中数据可视化的同义词, 这是一个强大的工具, 可以帮助我们制作优良的图表, 创造出令人吃惊的图片, 下面我们一起学习(本博文参考了知乎问题如何使用 ggplot2中黄宝臣的回答(), 并在此基础上补充了一些细节和自己的理解).

ggplot2函数里面为属性赋值的时候需要使用的参数名:

  1. 图形属性(aes): 表示几何对象的属性: 横坐标, 点的大小, 颜色, 填充色等; 比如一个点的属性有它的横纵坐标, 它的大小, 颜色等等.
  2. 不同的几何对象(geom_,  geometry的简称): 主要用来指定数据显示的形式: 点, 线, 或者条形; 如: geom_point(color='darkred')表示数据要用点进行显示, 颜色为黑红色.
  3. 统计变换(stat_,  statistics的简称): 比如求一些基本的数据属性, 如均值, 方差等, 算出来以后进行展示.

入门实例1: 基本图形的绘制

 x <- rnorm(100,14,5)
y <- x + rnorm(100,0,1) ggplot(data = NULL, mapping = aes(x = x, y = y)) + # data=NULL
geom_point(color = 'darkred') +
annotate('text',x=13,y=20,parse = T,
label = 'x[1]==x[2]')

ggplot(data = NULL, mapping = aes(x=x, y=y)) 生成的结果(默认数据集为NULL, 创建的图形对象在加上图层之前无法显示, 因此什么都看不到):

语法: ggplot(data = NULL, mapping = aes(), ... , environment = parent.frame()) 该函数主要有两个参数: 数据(指定绘图所用的默认数据集, 必须是数据框)和图形属性映射(在aes()里面). 这两个参数将被设为绘图的默认参数. 只有在新加的图层里面设定了新的参数, 默认值才会被修改. (注意, 即使函数里面的输入参数你不写清楚参数名, 也可以通过相对位置来确定, 但是为了可读性以及避免由于相对位置记错而引发错误, 建议还是都写上参数名)

再看看ggplot(data = NULL, mapping = aes(x=x, y=y)) + geo_point(color = 'darkred')生成的图像(+号用来添加图层, 该数据集使用了ggplot里面的默认数据集和图形属性映射, 而且使用了另外两个可选参数的默认值: 统计变换(stat="identity")/位置调整(position="identity")): 这里图层被添加到了ggplot()创建的图形对象上了.

语法: geom_point(mapping=NULL, data=NULL, stat="identity",position="identity", ..., na.rm=FALSE, show.legend=NA, inherit.aes=TRUE)

这里参数mapping在前, data在后, 和ggplot正好相反, 这是因为我们再图形对象中一般先设定数据集, 而在图层函数中大多是设定图形属性而不是数据集.

最后是整个上面的语句生成的图形:

summary函数:

summary函数可以帮助我们查看图形对象的结构, 考虑R里面的diamonds数据集(53940 x 10):

> p <- ggplot(data = diamonds, mapping = aes(x = carat, y = price, colour = cut))
> summary(p)
data: carat, cut, color, clarity, depth, table, price, x, y, z [53940x10] # 首先给出图形对象的默认设置
mapping: x = carat, y = price, colour = cut # 图形对象的默认设置
faceting: facet_null()

几何对象描述了应该用何种对象来对数据进行展示, 有些对象关联了相应的统计变换.

  • geom_point(): 用来绘制散点图;
  • geom_smooth(): 用来拟合一条平滑的曲线, 并将曲线和标准差展示在图中;
  • geom_boxplot(): 可以用来绘制箱线胡须图.
  • geom_line(), geom_path(): 都是绘制连线, 将数据点连接起来, line图只能从做到右绘制, path图则可以是任意方向;
  • geom_polygon(): 画点围成的多边形
  • ......
library("ggplot2")
x <- rnorm(100,14,5)
y <- x + rnorm(100,0,1) ggplot(data = NULL, aes(x = x, y = y)) +
geom_point() + geom_smooth()

ggplot(data = NULL, aes(x = x, y = y)) +
geom_point() + geom_line()

ggplot(data = NULL, aes(x = x, y = y)) +
geom_point() + geom_path()

入门实例2: 基本图形的绘制

library("ggplot2")
x <- c(rnorm(50,14,5), rep(20,20)) # 生成50个均值为14,标准差为5的随机数+20个值为20的数
y <- c(rnorm(50,14,5) + rnorm(50,0,1), rep(20,20))
# 绘图语句
ggplot(data = NULL, aes(x = x, y = y)) + # Begin draw
geom_point(color = 'darkred')

绘图语句里面用到了geom_point, 但是没有用到stat_(统计绘图)方面的函数, 看官方文档里面geom_point的用法可以发现, 它提供了一个"stat"的选项, 默认为: stat = "identity",这个表示不对数据进行任何统计变换, 但是如果我将这个参数设置为其他的呢? 即我们要对数据进行统计变换, 那么统计变换的效果又是什么样的呢? 我们先看看x,y变量里面都存放了什么东西!

> x  # x,y这两个变量里面的前50个数都是随机数, 但是后面20个数都是20, 也就是说, (x,y)有20个(20,20)重复的坐标
[1] 15.185802 13.288382 14.049740 11.887190 10.271295 11.798415 9.114219 19.091152
[9] 14.288480 19.660104 9.365842 24.286993 14.529903 21.785067 4.267601 12.585770
[17] 2.515565 10.978805 6.707766 17.032989 15.148695 7.662401 15.532458 9.102369
[25] 16.692523 16.959872 11.790089 8.236425 13.349470 16.593251 15.169231 13.024083
[33] 16.171105 10.150380 22.579654 15.101349 1.145253 8.670352 24.728247 18.523736
[41] 12.200371 4.155781 8.475500 10.048165 15.373836 26.380227 25.330350 7.801644
[49] 23.343966 14.910023 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000
[57] 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000
[65] 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000

坐标既然有重复, 那么绘图的时候就只显示一个点呗, 实际上, 默认上是这样显示的, 但是, 如果我们进行了统计变换, 得到的图将会是这样的: 我们竟然看到绘制的图坐标(20,20)的地方竟然是个圆球, 这个圆球代表了此坐标点出现的次数.

ggplot(data = NULL, aes(x = x, y = y)) + # Begin draw
geom_point(color = 'darkred', stat = "sum") # stat = "sum"

      这说明了一个什么问题? 这说明了geom_point这样的函数里面也是带有stat_(统计)功能的. 因此geom_和stat_其实是一回事. 但是其实stat_里面提供了一个stat_sum这个函数, 既然geom_point里面带有了stat, 那么stat_sum这个函数还有用吗? 请看下面的代码, 这个代码生成的图和上图是一模一样的.

ggplot(data = NULL, aes(x = x, y = y)) + # Begin draw
stat_sum(color = "darkred", geom = "point")

从上面我们可以归纳出ggplot2的特点2: 不要认为geom_和stat_是两种绘图方法, 他们其实是相互融合的好基友.

参考:

[1] http://docs.ggplot2.org/current/ (官方ggplot2 2.1.0 Help topics)

ggplot2使用初探的更多相关文章

  1. R: 关于 ggplot2 的初探

    生活还很长,别急,慢慢来.亲爱的 require(ggplot2)p1 <- ggplot(mpg, aes(displ, hwy)) + geom_point() ; p1p1 + scale ...

  2. 初探ggplot2 geom__制作面积图

        大家大概都对如下信息图并不陌生,该图用100%堆积面积图的方式来表现不同时期不同国家人数所占的比例.这是一种很有意思的表达方式,而面积图也是很常用的数据图表,现在让我们一起来看看如何在R里用g ...

  3. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  4. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  5. 跟我一起ggplot2(1)

    ggplot2 R的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果. qplot 加载qplot library(ggplot2) # 测试数据集,ggplot2内置的钻石数据 qplot( ...

  6. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  7. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  8. .NET文件并发与RabbitMQ(初探RabbitMQ)

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...

  9. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

随机推荐

  1. 51nod 1421 最大MOD值 | 暴力

    题面 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以是同一个) ai,aj ,使得 ai mod aj 最大并且 ai ≥ aj. Input 单组测试数据. 第一行包含一个整数n,表示数 ...

  2. Alpha 完结撒花 —— 事后诸葛亮

    写在前面 林燊大哥 一路走来,好不容易,终于完结了. 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题 用户在进店之前无法得知店铺的优劣,通过 ...

  3. iptables之NAT代理-内网访问外网

    1.前言 本文使用NAT功能:内网服务器,想上网又不想被攻击. 工作原理:内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做 ...

  4. SSM 小demo的盲点总结

    日期Date和String之间的转换: 1. 全局转换器(推荐使用) 1. 创建类实现Converter接口,实现Convert方法 public class StringToDateConvert ...

  5. 1: @override

    @Override是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记 @Override是伪代码,表示重写( ...

  6. @Html.DropDownListFor默认选中项

    http://q.cnblogs.com/q/73902/ 项目使用mvc4,给dropDownList指定默认值未选中 页面代码是: 1.未有默认选中值 Html.DropDownListFor(m ...

  7. python set() 集合的添加删除、交集、并集、差集、交叉补集、集合的方法介绍以及使用案例

    可变不可变: 1.可变:列表.字典.例如列表类型是可变的,我修改了列表中的元素的值,但是列表本身在内存中的地址是没有变化的,所以列表的元素是可以被改变的 >>> name=[&quo ...

  8. Hadoop生态圈-Hive函数

    Hadoop生态圈-Hive函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  9. Windows 2012 R2 安装net4.6.1

    下载并安装Net4.6.1 根据提示下载如下,并安装 https://support.microsoft.com/zh-cn/help/2919355/windows-rt-8-1--windows- ...

  10. IOS数组的排序和筛选

    1.排序 [self.tableItems sortUsingComparator:^NSComparisonResult(GPBTeacherBrief* obj1, GPBTeacherBrief ...