初识ggplot2

一、认知ggplot2

ggplot是基于图层这个样的一个理念,简单来说,一张统计图形包括如下的5个属性

  1. 几何对象(geometric object, 缩写位geom,包括点、线、大小等)
  2. 图形属性(aesthetic attributes,缩写为aes,包括颜色、形状、大小等)
  3. 数据的统计变换(statistical transformation,缩写位stats)
  4. 某个特定得坐标系(coordinate system,缩写位coord)中
  5. 分面(facet,指定绘图窗口划分为若干个子窗口)则可以用来生成数据不同子集的图形。

统计之都的讨论 http://cos.name/cn/topic/110682 有问题: 发邮件 Hadley@rice.edu

ggplot的谷歌论坛 https://groups.google.com/forum/#!forum/ggplot2

二、实例

画图实际上是把数据中的变量映射到图形属性上。以克拉(carat)数为X轴变量,价格(price)为Y轴变量。
以下面的这个数据集small为例。

上面这行代码把数据映射XY坐标轴上,需要告诉ggplot2,这些数据要映射成什么样的几何对象

1.散点图:

p + geom_point()
1
如果想将切工(cut)映射到形状属性

p <- ggplot(data= small, mapping = aes(x = carat, y = price, shape = cut));p + geom_point();
2
再比如我想将钻石的颜色(color)映射颜色属性:

p <-ggplot(data=small,mapping=aes(x=carat,y= price,shape=cut,colour=color));p+geom_point();
ggplot_3
geom_point()完成的就是几何对象的映射,ggplot2提供了各种几何对象映射,如geom_histogram用于直方图,geom_bar用于画柱状图,geom_boxplot用于画箱式图等等。

2.直方图

提供一个x变量,画出数据的分布。

ggplot(small) + geom_histogram(aes(x = price))
ggplot_4
binwidth 默认的是30,可以用binwidth=x来设定数据分成几块来画

同样可以根据另外的变量给它填充颜色,比如按不同的切工:

ggplot(small) + geom_histogram(aes(x = price, fill = cut))
ggplot_5
也可以将颜色分开来画,side-by-side地画直方图。

ggplot(small) + geom_histogram(aes(x = price, fill = cut), position = "dodge")
ggplot_6
还可以使用position=“fill”,按照相对比例来画。

[/crayon]

3.柱状图

柱状图非常适合于画分类变量。在这里以透明度(clarity)变量为例。按照不同透明度的钻石的数目画柱状图。

ggplot(small) + geom_bar(aes(x = clarity))
ggplot_7
柱状图两个要素,一个是分类变量,一个是数目,也就是柱子的高度。数目在这里不用提供,因为ggplot2会通过x变量计算各个分类的数目。
当然你想提供也是可以的,通过stat参数,可以让geom_bar按指定高度画图,比如以下代码:

ggplot()+geom_bar(aes(x=c(LETTERS[1:3]),y=1:3), stat="identity")
ggplot_8
柱状图和直方图是很像的,直方图把连续型的数据按照一个个等长的分区(bin)来切分,然后计数,画柱状图。而柱状图是分类数据,按类别计数。我们可以用前面直方图的参数来画side-by-side的柱状图,填充颜色或者按比例画图,它们是高度一致的。

colour参数指定的是曲线的颜色,而fill是往曲线下面填充颜色。

ggplot(small) + geom_density(aes(x = price, fill = clarity))
ggplot_9

4.箱式图

ggplot(small) + geom_boxplot(aes(x = cut, y = price, fill = color))
ggplot_10

5.标尺(Scale)

前面我们已经看到了,画图就是在做映射,不管是映射到不同的几何对象上,还是映射各种图形属性。这一小节介绍标尺,在对图形属性进行映射之后,使用标尺可以控制这些属性的显示方式,比如坐标刻度,可能通过标尺,将
坐标进行对数变换;比如颜色属性,也可以通过标尺,进行改变。

ggplot_11

[/crayon]
颜色,大小和形状是图形属性,这个工具能够使数据取值与图形属性产生对应关系

三、python中调用R

python也有一个ggplot的包 https://github.com/yhat/ggplot/tree/master/docs

python中的ggplot用起来太麻烦了
还不如直接用Python调用写好的ggplot脚本呢,然后传参数进去

参考资料:

《ggplot2:数据分析与图形艺术》这本书用来存储错误的地方以及该书的代码https://github.com/cosname/ggplot2-translation
代码下载地址:https://github.com/cosname/ggplot2-translation/archive/master.zip
http://ygc.name/2014/05/11/use-ggplot2/(这个网页很强大,具体用法还可以还是看他的)
http://blog.sina.com.cn/s/blog_77b74e97010194mw.html
http://yulongniu.bionutshell.org/blog/2012/08/21/python-r-rpy2/
http://rpy.sourceforge.net/rpy2/doc-2.2/html/introduction.html

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注