星期日, 三月 18, 2012

ggplot2的新特性:升级版的二维直方图

ggplot2包可称得上是R语言中最为复杂和炫目的绘图包了。本博客也用了一系列文章对该包进行了介绍。在最近的3月初,其版本从0.89升级到了0.90,升级后的新版本提供了许多新的功能。其中之一是加强了对二元变量统计指标的显示能力。在之前的版本中,只能在图形中显示一元变量的统计指标(stat_summary)。对于二元变量只能显示简单的计数指标(stat_bin2d)。新版本相当于在二者基础上的升级,其主函数为stat_summary2d或者stat_summary_hex。下面我们先来熟悉下老版本中的两个函数,再介绍新函数。还有一点要注意的是,R内核需要升级到2.14以上才能使用新的ggplpot2。

本文的例子是R中内置的钻石数据(diamonds),其中用到的变量包括价格(price),重量(carat)以及某种尺寸指标(depth)。先绘制carat和price之间的散点图来了解二者关系,从下图可见,由于数据量过大,尽管使用了透明度参数,散点仍非常密集。

为了简化数据,我们可以对同一重量的钻石求价格均值,从下图来就简洁了许多。当然另一种简化方法就将carat进行区间分组,然后用箱线图来表现。
如果要同时考虑carat和depth两个变量,我们可以绘制如下的二元直方图。可观察到当carat较低,同时depth在60左右时,数据样本最多。
如果要加入price变量一并考查的话,就需要使用最新的stat_summary2d函数。从下图可观察到carat越大,price越高。而且给定carat条件下,depth在60左右的价格相对较高。
stat_summary2d函数允许将任一个函数值映射到矩形的颜色上,比如说想观察price的变异系数在不同区块的变化情况,我们可以从下图到得直观的显示。
相关代码如下:
# 第一张图,简单的散点图
d <- ggplot(diamonds, aes(x=carat, y=price))
d + geom_point(alpha=0.3,colour='lightskyblue4')
# 第二张图,展示stat_summary的功能
d + stat_summary(fun.y='mean',geom='point',colour='lightskyblue4')
# 第三张图,展示stat_bin2d的功能
d <- ggplot(diamonds, aes(x=carat, y=depth))
d + stat_bin2d()
# 第四张图,展示stat_summary2d的功能
d <- ggplot(diamonds, aes(x=carat, y=depth, z=price))
d + stat_summary2d()
# 第五张图
d + stat_summary2d(fun = function(x) sd(x)/mean(x))

没有评论:

发表评论