快速学习ggplot2

R语言里面一个比较重要的绘图包——ggplot2,是由Hadley Wickham于2005年创建,于2012年四月进行了重大更新,作者目前的工作是重写代码,简化语法,方便用户开发和使用。ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离,是按图层作图,有利于结构化思维,同时它保有命令式作图的调整函数,使其更具灵活性,绘制出来的图形美观,同时避免繁琐细节。ggplot2可以通过底层组件构造前所未有的图形,你所受到的限制只是你的想象力。

它大概可以分为三个部分:

(1)数据层(2)几何图形层(3)美学层;

如果你用过photoshop,那么对于图层你一定不会陌生。图层好比是一张玻璃纸,它包含有各种图形元素,你可以分别建立图层然后可以按照不同顺序叠放在一起,组合成图形的最终效果。因此图层可以允许用户一步步的构建图形,方便单独对图层进行修改、增加统计量、甚至改动数据,因此绘制出来的图形一般十分漂亮并且符合自己的意愿。

ggplot2大致包含了一下几个基本概念:

? 数据(Data)和映射(Mapping)
? 标度(Scale)
? 几何对象(Geometric)
? 统计变换(Statistics)
? 坐标系统(Coordinate)
? 图层(Layer)
? 分面(Facet)

数据(Data)和映射(Mapping)
将数据中的变量映射到图形属性。映射控制了二者之间的关系。

标度(Scale)

标度负责控制映射后图形属性的显示方式。具体形式上来看是图例和坐标刻度。Scale和Mapping是紧密相关的概念。

几何对象(Geometric)

几何对象代表我们在图中实际看到的图形元素,如点、线、正方块等多边形。

统计变换(statistics)
对原始数据进行某种统计计算,例如对二元散点图加上一条回归线或者置信区间登记。

分面(Facet)
条件绘图,将数据按某种方式分组,然后分别绘图。分面就是控制分组绘图的方法和排列形式。

我们使用ggplot2自带的数据集mpg,它包含了1999年和2008年之间 EPA使上可用燃料经济性数据的一个子集等信息。它总共有234行,11列数据。

加载了ggplot2包之后,可以使用如下语句绘制出下图

[plain] view plain copy

  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point()+aes(colour=factor(mpg$year))

其中data=mpg,mapping = aes(x=cty,y=hwy)表示数据层,geom_point()表示几何图形层,aes(colour=factor(mpg$year))表示美学图层。我将year映射为映射到颜色属性。如过我们把上面句子写成如下:

[plain] view plain copy

  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))

则它什么也不会绘出来,因为他缺少几何图形层。写成下面语句绘制出来的散点图全是黑点,因为它缺少美学图层

[plain] view plain copy

  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point()

如果我们觉得这些点太小或者太大的时候,我们可以通过改变size的参数来调节散点的大小,一般使用方法是size=I(x);这个I()最好加上,否则有的时候会出现莫名奇怪的错误,有的时候不加也行,直接size=x也行,x为散点的大小,它一般按照使用者的经验或一次次试来确定大小的。

[plain] view plain copy

  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point(size=I(7))+aes(colour=factor(mpg$year))

我们也可以绘制出它的拟合曲线以及置信区间,它根据年份绘出了两条拟合曲线以及置信区间。

[plain] view plain copy

  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point()+aes(colour=factor(mpg$year))+stat_smooth()

但如果我们只想绘制一条拟合曲线和一个置信区间,我们只需要将代码稍微改变一下就可以搞定。

[plain] view plain copy

  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+geom_point(aes(colour=factor(mpg$year)))+stat_smooth()

在前面,我们将year变量映射到散点的颜色上面,现在我们也可以将displ变量映射到散点大小,绘制出来的大小不同的散点。

[plain] view plain copy

  1. ggplot(data=mpg,mapping =aes(x=cty,y=hwy))+
  2. geom_point(aes(colour=factor(year),size=displ))+
  3. stat_smooth()

使用过Photoshop的人一定知道透明度,即alpha。当然我们的ggplot2包也提供相关参数,可以改变alpha值得大小来改变散点的透明度。alpha的值在0—1之间,不在这个范围的话则会报错。为了与前面的图片有明显的区别,我再这里的alpha值调的比较小。一般默认alpha值得大小为1。

[plain] view plain copy

  1. ggplot(data=mpg,mapping = aes(x=cty,y=hwy))+
  2. geom_point(aes(colour=factor(mpg$year),size=displ),alpha=0.25)+
  3. stat_smooth()

当然我们也可以给图片增加标题,并精细修改图片,给图片增加x,y轴说明,以及其他说明。

[plain] view plain copy

  1. ggplot(mpg, aes(x=cty, y=hwy))+
  2. geom_point(aes(colour=class,size=displ),alpha=0.6,position = "jitter")+
  3. stat_smooth()+
  4. scale_size_continuous(range = c(4, 10))+
  5. facet_wrap(~ year,ncol=1)+
  6. ggtitle("汽车油耗与型号")+
  7. labs(y=‘每加仑高速公路行驶距离‘,
  8. x=‘每加仑城市公路行驶距离‘)+
  9. guides(size=guide_legend(title=‘排量‘),
  10. colour = guide_legend(title=‘车型‘,
  11. override.aes=list(size=5)))

写的比较早的博客或者论坛上面会有opts()函数来给图片命名,不过只有在以前的ggplot2包版本里面有opts()函数,但现在比较新的ggplot2包里面已经没有该函数了,如果你使用较新的ggplot2包使用该函数则会提示你找不到该函数,因为它已经被替换为ggtitle(),使用方法如上面代码。

上面代码里面有一个position的函数,通过调整参数来改变图层的位置,现在ggplot2只有5种,再往回版本的更新,也许会增加。大家可以修改position函数的参数来观测不同参数绘制出来的图形会有哪些变化。

fill:填充方式, 先把数据归一化,再填充到绘图区的顶部。

dodge:比如说不同折线的标记有可能重复,可以改变改参数进行一个“避让”方式,即往旁边闪,比如说如柱形图的并排方式。

identity:原地不动,不调整位置,默认。

jitter:如果严重的重叠,随机抖一抖,让本来重叠的露出点头来

stack:在竖直方向叠罗汉,绘制出来类似条形图

在有的时候我们需要把一个变量和其他不同的变量进行一个对比,这个时候我们就需要把他们画在同一张图上面。ggplot2绘图就和Photoshop有一个功能很相似,那就是  图层, 我们可以把不同的图层叠加在一起,这样就画在了同一张图上面。比如说我们要研究mpg数据中cty和hwy,以及displ之间的关系,我们就可以通过如下代码,将他们之间的散点图画在一起。

[plain] view plain copy

  1. ggplot()+
  2. geom_point(aes(x=mpg$cty,y=mpg$hwy),color="red")+
  3. geom_point(aes(x=mpg$cty,y=mpg$displ),color="green")

结果如下图:两个因变量用不同的颜色来表示。

接下来,我们来绘制一个扇形图,我们来统计一下class中各个品牌所占比例,代码和图片如下:

[plain] view plain copy

  1. ggplot(mpg)+geom_bar(width=1, aes(x=factor(1),fill=mpg$class))+
  2. coord_polar(theta="y")

我们也可以通过使用ggplot2包来绘制 Coxcomb Plots (鸡冠花图,又名玫瑰图),这个也非常简单。width的值可以调整各个扇形区域之间的距离。

[plain] view plain copy

  1. ggplot(mpg, aes(x = factor(mpg$class))) +
  2. geom_bar(width = 0.7,aes(color=factor(mpg$class))) + coord_polar()

当然我们也可以给他增添颜色,代码只要稍微改一下:

[plain] view plain copy

  1. ggplot(mpg, aes(x = factor(mpg$class),fill=mpg$class)) +
  2. geom_bar(width = 0.7) + coord_polar()

转载请注明原文链接:http://blog.csdn.net/wzgl__wh/article/details/51901093

时间: 2024-08-26 16:05:23

快速学习ggplot2的相关文章

SQL Server 2012笔记分享-46:如何快速学习T-SQL语句

对于初学者来说,T-SQL语句的编写一直是个难题,初学者还是习惯使用图形界面来做相关的SQL方面的维护工作.但是在一个稍微复杂大型的SQL场景中,如果我们能够快速的掌握和理解SQL语句的编写和使用,那么会使我们的运维工作达到事半功倍的效果. 其实对于SQL server 2012来说,本身就提供了很多途径来帮助初学者获取日常管理任务的对应T-SQL脚本.下面我们来举几个快速获取T-SQL脚本的例子. ================================================

第23篇 js快速学习知识

前面说了js的一些高级方面的基础知识,这些都是比较容易出错的和比较难理解的东西,除了这些之外其它的知识都比较简单了,基础学好了,扩展起来就是小意思.今天说说js方面可以快速学习和入门的知识. 1.闭包 对于闭包来说,很多人对它有误解,有的说的怎么怎么好,但是我觉得这个东西说的那么悬无非是忽悠人的,对于闭包我看到有一篇博客上面说的很好: (1)闭包是一种设计原则,它通过分析上下文,来简化用户的调用,让用户在不知晓的情况下,达到他的目的: (2)网上主流的对闭包剖析的文章实际上是和闭包原则反向而驰的

MongoDB快速学习1

从我第一次听到Nosql这个概念到如今已经走过4个年头了,但仍然没有具体的去做过相应的实践.最近获得一段学习休息时间,购买了Nosql技术实践一书,正在慢慢的学习.在主流观点中,Nosql大体分为4类,键值存储数据库,列存储数据库,文档型数据库,图形数据库.今天主要快速的浏览了文档型数据库中目前市场占有率的最高的MongoDB数据库.记得初次见到和关注这个数据库还是我刚来上海的时候,公司将该数据库作为新建的项目管理系统的后台数据库,当时还是很向往的,只是无缘参与那个项目,也就一直没有和该数据库打

概率论快速学习01:计数

2014-05-15 22:02 by Jeff Li 前言 系列文章:[传送门] 马上快要期末考试了,为了学点什么.就准备这系列的博客,记录复习的成果. 正文-计数  概率 概率论研究随机事件.它源于赌徒的研究.即使是今天,概率论也常用于赌博.随机事件的结果是否只凭运气呢?高明的赌徒发现了赌博中的规律.尽管我无法预知事件的具体结果,但我可以了解每种结果出现的可能性.这是概率论的核心. "概率"到底是什么?这在数学上还有争议."频率派"认为概率是重复尝试多次,某种结

产品经理在早期如何快速学习?

产品经理在早期如何快速学习? 1.多阅读 (1)阅读专业书籍 比如说小米的黎万强写了一本<参与感>,讲述了小米成长过程中的一系列案例分析,概念总结.黎老师是小米创始元老,案例有小米的成功背书,再加上朴实但行云流水的文笔,这就是一本值得反复阅读的好书. (2)广泛阅读 2.多做事

Bootstrap快速学习笔记(2)表单系列之二

欢迎收看大奥编写的Bootstrap快速学习笔记(2)表单系列之二 本学习笔记根据[慕课网]教程修改而来,用它学习Bootstrap,将会带来全新的体验哦: 表单控件大小 表单控件状态 按钮 图像 详细介绍 表单控件大小表单控件大小可以通过给表单控件添加class类来实现,如果想要比较大,则添加input-lg类,如果想要比较小, 则添加input-sm类,但这仅是对高度进行了处理,如果要对宽度进行处理,需要在每个input控件外围添加div容器并带有col-xs-4类,并 且要在这组控件的外围

Bootstrap快速学习笔记(1)排版系列之二

欢迎收看大奥编写的Bootstrap快速学习笔记(1)排版系列之二 本学习笔记根据[慕课网]教程修改而来,用它学习Bootstrap,将会带来全新的体验哦: 表格 表格行的类 详细介绍 表格表格是Bootstrap的基础组件之一,有一个基础样式和四个附加样式以及一个响应式样式,全部通过class类来实 现,.table:基础表格,这是无论哪种类型的表格都必不可少的类:.table-striped:斑马线表格,更具可读性:.table- bordered:带边框的表格:.table-hover:鼠

快速学习命令的方法

概述:用户使用shell跟内核交互,Linux 中有很多命令,不同的命令有不同的功能.多个命令合起来可以完成一个大的功能.命令很多我们不可能记得每条命令的用法. 所以,我们必须有一种方法来快速知道一个命令是如何使用的,有什么作用.所以,几乎所有的命令都提供了帮助手册,告诉命令的使用者如何使用命令.命令 的作用等等.帮助手册页很长,我们不可能为了使用一个命令,而从头到尾把帮助手册读完,这时候需要一种快速读懂(有目的的去读)命令的帮助手册的方法.是如何实现的呢?管理整个计算硬件的其实是核心(kern

Bootstrap快速学习笔记(1)排版系列之一

欢迎收看大奥编写的Bootstrap快速学习笔记(1)排版系列之一 本学习笔记根据[慕课网]教程修改而来,用它学习Bootstrap,将会带来全新的体验哦: 标题 段落 强调内容 粗体和斜体 强调相关的类 文本对齐风格 列表 代码展示 详细介绍 标题 Bootstrap重写了h1-h6标题的样式属性并自定义了.h1-.h6类,并用small标签来显示副标题 段落 Bootstrap重写了p标签的样式属性 强调内容 .lead类改变文本样式 粗体和斜体 粗体<strong><b>斜体