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包之后,可以使用如下语句绘制出下图

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映射为映射到颜色属性。如过我们把上面句子写成如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ggplot(mpg, aes(x=cty, y=hwy))+ geom_point(aes(colour=class,size=displ),alpha=0.6,position = "jitter")+stat_smooth()+scale_size_continuous(range = c(4, 10))+facet_wrap(~ year,ncol=1)+ggtitle("汽车油耗与型号")+labs(y='每加仑高速公路行驶距离',x='每加仑城市公路行驶距离')+guides(size=guide_legend(title='排量'),colour = guide_legend(title='车型',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之间的关系,我们就可以通过如下代码,将他们之间的散点图画在一起。

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

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

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

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

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

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

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

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

(未完待续

原文链接:http://blog.csdn.net/wzgl__wh/article/details/51901093

快速学习ggplot2相关推荐

  1. 业余快速学习虚幻引擎教程

    仅用5小时学会虚幻引擎! 你会学到什么 专为希望在业余时间打造虚幻引擎技能的艺术家和开发人员量身定制的专业技术 从几何图形到材料,从照明到互动,所有方面的提示 探索如何创造建筑水的效果 如何使用顶点绘 ...

  2. 零基础快速学习Java技术的方法整理

    在学习java技术这条道路上,有很多都是零基础学员,他们对于java的学习有着很多的不解,不知怎么学习也不知道如何下手,其实Java编程涉及到的知识点还是非常多的,我们需要制定java学习路线图这样才 ...

  3. 怎样快速学习html5,如何快速学习HTML5?带你了解HTML5学什么?

    今天小编要为大家分享的文章是关于如何快速学习HTML5?HTML5主要学些什么的文章.近年来前端开发非常热门,前端开发工程师也很稀缺,于是很多人将其视为高薪行业的代名词.HTML5前端开发工程师被称作 ...

  4. 新手搭ssm要多久_如何快速学习ssm 框架?

    要快速学习SSM框架,你需要一套学习曲线平滑的教程 1. 很快可以看到效果 SSM框架这种教程的,在百度或者git上一搜一大把,不过很遗憾,大部分你照着上面的流程做,是做不出来的,要么缺少包,要么配置 ...

  5. MySQL主从原理,基于快速学习一门技术的3种方式!

    根据经验,想要快速学习一门技术有3种方式. 第一种方式是通过代码来理解它的实现,反推它的逻辑. 这种方式的难度很大,而且起点相对高,能够沉浸其中的人非常少,过程相对来说是苦闷的,但如果能够沉下心来看代 ...

  6. 如何自学python爬虫-小白如何快速学习Python爬虫?

    原标题:小白如何快速学习Python爬虫? 很多同学想学习 爬虫 ,对于小白来说,爬虫可能是一件非常复杂.技术门槛很高的事情.而且爬虫是入门 Python 最好的方式,没有之一. 我们可以通过爬虫获取 ...

  7. 自学python方法-总算懂得快速学习python的方法

    随着Python的进一步发展,越来越多的现成的Python的机器学习的算法已经发布出来.为了可以更好地运用这些机器学习的算法,我们有必要对Python有个初步的了解.以下是小编为你整理的快速学习pyt ...

  8. HBase应用快速学习

    HBase是一个高性能.面向列.可伸缩的开源分布式NoSQL数据库,是Google Bigtable的开源实现. HBase的思想和应用和传统的RDBMS,NoSQL等有比较大的区别,这篇文章从HBa ...

  9. jQuery快速学习

    jQuery快速学习 1.$(document).ready 的作用是等页面的文档(document)中的节点都加载完毕后,再执行后续的代码,因为我们在执行代码的时候,可能会依赖页面的某一个元素,我们 ...

最新文章

  1. 世界首批智能音箱AI IQ测试报告,小米、京东和阿里初步PK
  2. JAVA中关于并发的一些理解
  3. MATLAB 内存容量修改
  4. 查看Linux服务器的CPU详细信息
  5. js中 javascript:void(0) 用法详解
  6. Ant Design Landing 产品首页的设计神器
  7. 【单片机学习笔记】(25):PID初识、门电路符号、H桥驱动电路、中断服务函数使用注意事项、SIM800C打电话发短信、OLED
  8. CC1310开发环境
  9. 前端学习——VUE组件基础
  10. JAVA学习第一阶段模块三
  11. LC振荡电路以及考虑寄生参数时MOS管开通关断分析
  12. python的数据模型_(一)python 数据模型
  13. 性格色彩测试android程序开发之九--sqlite数据库
  14. nav 计算机网络_计算机网络课件谢希仁
  15. 边框发光样式css3,用CSS3实现发光方格边框
  16. 计算机桌面变成立体,win7系统将桌面变成立体桌面的两种方法
  17. 六、Abp Vnext 中Efcore的多模块关联查询
  18. 中国数字化转型为全球带来机遇
  19. 独立思考Justic:Sale Motherhood
  20. 多频段融合方法——图像拼接

热门文章

  1. a.ou、coff、elf三种文件格式
  2. 静态时序分析的约束命令
  3. 语音识别——基于深度学习的中文语音识别tutorial(代码实践)
  4. Spark、Flink、CarbonData技术实践最佳案例解析
  5. 上拉加载下拉刷新了解下
  6. gradle zip task 排除文件
  7. Netkiller Architect 手札之前言
  8. mysql单用户赋予多库权限
  9. Spark环境搭建(一)-----------HDFS分布式文件系统搭建
  10. Kubelet源码分析(一):启动流程分析