ggplot2使用初探

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

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

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

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

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

ggplot(data = NULL, aes(x=x, y=y))  生成的结果:

我们可以看到这里单独的一条ggplot命令仅仅是绘制了一个图形框, 数据点还没有画上去.

再看看ggplot(data = NULL, aes(x=x, y=y)) + geo_point(color = ‘darkred‘)生成的图像:

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

从上面我们可以归纳出ggplot2的特点1: ggplot2按照图层(layer)来绘图, 通过"+"号来进行图层的组合;

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

  • 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_是两种绘图方法, 他们其实是相互融合的好基友.

ggplot函数解析:

在RStdio的命令行里面敲击help("ggplot")可以在右侧显示此函数的官方帮助文档.

描述:

ggplot()初始化一个ggplot对象,可以用来声明输入数据帧,指定增加一些plot美学的东西.

使用: 

# ggplot(data = , mapping = aes(x = , y =))ggplot(data = NULL, mapping = aes(), ... , environment = parent.frame())

参数:

data: 默认的用于plot的数据集, 如果不是data.frame的话,将会使用fortify进行转化. 如果没有指定, 必须为每个层提供.

mapping: (作图就是从data中探索到的信息到图形要素graph进行mapping的过程)默认用来plot的aesthetic mapping的列表(可由aes产生). 如果没有指定, 必须为每个层提供.

ggplot(data = NULL, aes(x = x, y = y))  -- aes的x=, y=指定了要绘制的数据.

geom_point解析:

功能: 用来生成散点图.

使用:

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

参数:

data: 本层所要展示的数据. 有3个选项, 1) NULL(默认),数据从ggplot里面的plot data继承. 2) data.frame(或者其他目标)将会覆盖plot data; 3)function(这个函数的返回值必须是data.frame作为本layer数据).

geom_plot支持x, y, alpha(透明度), colour, fill, shape, size, stroke. 如: geom_point(colour = "grey90", size = 1.5)

annotate解析:

功能: 用来生成一个注释layer(注意layer--层的概念)

绘图总结:

第一步: 初始化. ggplot2绘图的第一步就是初始化(载入数据空间,选择数据以及默认的aes): data就是载入你要画的数据所在的数据框,指定为你的绘图环境, 载入之后, 可以避免写大量的$来提取data.frame之中的向量. 当然, 如果你的数据都是向量, 也可以不指定, 但是要在申明中标注data=NULL, 不然会报错. aes(aesthetic美学的缩写), 什么时候把参数写在aes里面呢? 生么时候写在外面呢? 任何与数据向量顺序相关,需要逐个指定的参数都必须写在aes里面(不懂!!!).

ggplot(data = , aes(x = , y = ))

参考:

[1] http://docs.ggplot2.org/current/

时间: 2024-10-12 16:31:43

ggplot2使用初探的相关文章

R: 关于 ggplot2 的初探

生活还很长,别急,慢慢来.亲爱的 require(ggplot2)p1 <- ggplot(mpg, aes(displ, hwy)) + geom_point() ; p1p1 + scale_x_continuous("Engine displacement (L)") + scale_y_continuous("Highway MPG") p1 + scale_x_continuous(limits = c(2, 6))p1 + scale_x_cont

初探ggplot2 geom__制作面积图

大家大概都对如下信息图并不陌生,该图用100%堆积面积图的方式来表现不同时期不同国家人数所占的比例.这是一种很有意思的表达方式,而面积图也是很常用的数据图表,现在让我们一起来看看如何在R里用ggplot2和plot.area来制作一个面积图. 在制作图表之前,首先我们先创建一些随机示例数据.R代码如下: 1 # 创建随机数 2 set.seed(3) 3 # 创建时间序列(0-20的time step) 4 t.step<-seq(0,20) 5 # 创建十组变量名(从a到j) 6 grps<

进阶之初探nodeJS

一.前言 在"初探nodeJS"随笔中,我们对于node有了一个大致地了解,并在最后也通过一个示例,了解了如何快速地开启一个简单的服务器. 今儿,再次看了该篇随笔,发现该随笔理论知识稍多,适合初级入门node,固萌生一个想法--想在该篇随笔中,通过一步步编写一个稍大一点的node示例,让我们在整体上更加全面地了解node. so,该篇随笔是建立在"初探nodeJS"之上的,固取名为"进阶之初探nodeJS". 好了,侃了这多,那么我们即将实现一个

R数据可视化第二弹---ggplot2工具箱

ggplot2工具箱 ggplot2的图层化架构让我们以一种结构化的方法来设计和构建图形,这里每一小节解决一个特定的作图问题. 1.基本图形类型 geom_area()用于绘制面积图 geom_bar(stat="identity")绘制条形图,我们需要指定stat="identity",因为默认的统计变换会自动对值进行计数. geom_line()绘制线条图,从左到右连接 geom_point()绘制散点图 geom_polygon()绘制多边形 geom_tex

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

前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数据. 273这个M站点是产品推荐我看的.第一眼看这个产品时我就再想他们这个三次加载和翻页按钮的方式,那么小分页的pageIndex是怎么计算的.所以就顺便看了下源码. 提到看源码时用到了Chrome浏览器的格式化工具(还是朋友推荐我的,不过这个格式化按钮的确不明显,不会的话自行百度). 三次加载和分

[转载]HDFS初探之旅

转载自 http://www.cnblogs.com/xia520pi/archive/2012/05/28/2520813.html , 感谢虾皮工作室这一系列精彩的文章. Hadoop集群(第8期)_HDFS初探之旅 1.HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上.它所具有的高容错.高可靠性.高可扩展性.高

MongoDB初探系列之二:认识MongoDB提供的一些常用工具

在初探一中,我们已经可以顺利的将MongoDB在我们自己的机器上跑起来了.但是在其bin目录下面还有一些我们不熟知的工具.接下来,将介绍一下各个小工具的用途以及初探一中MongoDB在data文件夹下创建的文件的用途. 1.bin目录下面的各种小工具简介及使用方式 bsondump.exe 用于将导出的BSON文件格式转换为JSON格式mongo.exe mongoDB的客户端 mongod.exe 用于启动mongoDB的Server mongodump.exe 用于从mongodb数据库中导

Asynchronous Pluggable Protocols 初探

Asynchronous Pluggable Protocols,异步可插入协议,允许开发者创建可插协议处理器,MIME过滤器,以及命名空间处理器工作在微软IE4.0浏览器以及更高版本或者URL moniker中.这涉及到Urlmon.dll动态链接库所公开(输出)的可插协议诸多功能,本文不进行深入的原理讲解,只对它其中之一的应用进行解析,那就是如何将一个应用程序注册为URL协议. 应用场景: tencent协议: 当我们打开"tencent://message/?uin=要链接的QQ号 &qu

重新认识HTML,CSS,Javascript 之node-webkit 初探

今天我们来系统的.全面的 了解一下前端的一些技术,将有助于我们写出 更优秀的 产品 出来. 什么是HTML? HTML 是用来描述网页的一种语言. HTML 包含一些根节点,子节点,文本节点,属性节点,组成, 它通过一系列预定义标签来描述网页结构,如: <title>This is title</title> ,这个表明该网页的标题是 This is title. 什么是CSS? CSS 指层叠样式表 (Cascading Style Sheets),它描述浏览器显示如何显示htm