1、ggplot2的逻辑。
ggplot2的逻辑在我看来其实是真正实现了一个图层叠加的概念:一句语句代表一张图,然后再有最小的单元图层。这个与其他命令式的绘图完全不同,来做个比较:
#这是基于graphic包里例子
x <- rnorm(100,14,5)
y <- x + rnorm(100,0,1)
plot(x,y)
text(13,20, expression(x[1] == x[2]))
输出的图是这样的:
我们可以看到这种绘图方式实际上是按命令添加的,以plot开始,可以以任何方式结束,每加上一个元素,实际上都是以一句单独的命令来实现的。这样做的缺点就是,其实不符合人对于画图的一般认识。其次,就是,我们没有一个停止绘图的标志,这使得有时候再处理的时候就会产生一些困惑。优势其实也有,在做参数修改的时候,我们往往可以很方便地直接用一句单独的命令修改,譬如对于x轴的调整,觉得不满意就可以写命令直接调整。而ggplot2则意味着要重新作图。
再来看ggplot2的代码:
x <- rnorm(100,14,5)
y <- x + rnorm(100,0,1)
ggplot(data= NULL, aes(x = x, y = y)) + #开始绘图
geom_point(color = "darkred") + #添加点
annotate("text",x =13 , y = 20,parse = T,
label = "x[1] == x[2]") #添加注释
画出的结果如下:
我们可以发现,ggplot的绘图有以下几个特点:第一,有明确的起始(以ggplot函数开始)与终止(一句语句一幅图);其二,图层之间的叠加是靠“+”号实现的,越后面其图层越高。
其次就是对于分组数据的处理,其实这方面,lattice已经做得很好了,不过我会在后面更仔细地叙述ggplot2是怎么看分组数据的绘图的。