微信扫一扫

028-83195727 , 15928970361
business@forhy.com

快速学习ggplot2

ggplot2,数据可视化,R语言2016-07-15

        R语言里面一个比较重要的绘图包——ggplot2,是由Hadley Wickham于2005年创建,于2012年四月进行了重大更新,作者目前的工作是重写代码,简化语法,方便用户开发和使用。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()


(未完待续)