星期五, 一月 27, 2012

ggplot2绘图入门系列之四:再说散点图

前文中已初步介绍了散点图的绘制方法,本文介绍一些细节方面的参数设置。

1 色彩和形状的控制
数据特征不仅可以用坐标来表示,也可以用不同的色彩或形状来表示。仍以mpg数据集为例,所用到的变量有cty(城市中行驶距离),hwy(高速路行驶距离),displ(排量大小),year(生产年份)
library(ggplot2)
p <- ggplot(mpg, aes(cty, hwy))
p1 <- p + geom_point(aes(colour = factor(year),shape = factor(year), size = displ), alpha = 0.6, position = 'jitter')
print(p1)
我们将1999年生产车型用红色圆形表示,2008年用兰色三角形表示,排量用图形的大小表示,并且设置了透明度和jitter以避免样本点之间的重叠。可观察到2008年生产的大排量车型较多,从而油耗较高,单位油耗行驶距离较短。

2 坐标的控制
上图右上角数据点较为稀疏,这种情况下可用对数变换。为了演示ggplot2对图形坐标的控制,我们对X轴和Y轴均进行对数变换,然后对X轴的坐标显示加以限制,只显示X轴数据的均值,以及一倍标准差的坐标。

cty.mean=with(mpg,mean(cty))
cty.sd=with(mpg,sd(cty))
p1 + scale_x_continuous(trans='log',breaks=c(cty.mean-cty.sd,cty.mean,cty.mean+cty.sd), labels=c("high", "mean", "low")) + scale_y_continuous(trans='log')


3 文字说明
利用geom_text函数可添加文字说明以增强图形的可读性

p <- ggplot(mtcars, aes(x=wt, y=mpg,colour=factor(cyl),label=rownames(mtcars))) 
p + geom_text(hjust=0,vjust=-1,alpha=0.8)+ geom_point(size=3,aes(shape=factor(cyl)))


4 矩阵散点图
ggplot2包中也提供了矩阵散点图函数

plotmatrix(USArrests)+geom_smooth()


6 条评论:

  1. 你好,最近开始学R,非常感谢你在博客中提供这么好的分享。请教一下矩阵散点图里的对角线的图是什么意思呢:是只看X方向坐标而当做数量统计?还是和Y结合起来看?

    回复删除
    回复
    1. 对角线的图是变量的密度估计,比如左上角第一个就是murder这个变量的密度估计曲线。

      删除
  2. 博主好, 请教个问题, 我使用本文第一节中的代码, 可以运行出与本文给出的样图相似的结果(坐标轴上标出的标签个数略有不同), 但是用第二节中的代码却跑出完全不同的结果. 我想部分原因可能和http://stackoverflow.com/questions/14255533/pretty-ticks-for-log-normal-scale-using-ggplot2-dynamic-not-manual相同. 但是为什么相同代码得到的图形不一样呢? 请问是否在使用ggplot2包时需要预先做一些设置呢? 比如先library(scales)? 抱歉翻出一年前的文章来提问.

    回复删除
    回复
    1. 惊讶的发现, 运行第二节代码前不能print(p1), 否则后面结果是错的. 剩下只有标签问题了, 为什么博主能一下子得到e^.x格式, 我得到的是数值呢? 而且标签个数往往很少, 很不美观.

      删除
    2. 以前是老版画的图,ggplot2升级之后标签就是这样了,之所以个数很少是因为这个数据本身不适合对数变换,你需要手动控制breaks,至于更多的控制标签显示方式,可以参见R.Graphics.Cookbook这本书的第八章14小节。

      删除
    3. 明白了, 太感谢了 =P

      删除