
ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离
ggplot2是按图层作图
ggplot2保有命令式作图的调整函数,使其更具灵活性
ggplot2将常见的统计变换融入到了绘图中。
==================================================================
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是怎么看分组数据的绘图的。
2. ggplot2的要素
我们这里不谈qplot(quickly plotting)方法,单纯谈ggplot方法。不谈底层的实现思想,我们简单地理解,ggplot图的元素可以主要可以概括如下:最大的是plot(指整张图,包括background和title),其次是axis(包括stick,text,title和stick)、legend(包括backgroud、text、title)、facet这是第二层次,其中facet可以分为外部strip部分(包括backgroud和text)和内部panel部分(包括backgroud、boder和网格线grid,其中粗的叫grid.major,细的叫grid.minor)。大致见下图,这部分内容的熟悉程度直接影响到对于theme的掌握,因此希望大家留心。
3. ggplot2图层以及其他函数的分类
好了,现在把这些理念的东西讲完了之后,下面来理解ggplot2里的绘图命令。
ggplot2里的所有函数可以分为以下几类:
用于运算(我们在此不讲,如fortify_,mean_等)
初始化、展示绘图等命令(ggplot,plot,print等)
按变量组图(facet_等)
真正的绘图命令(stat_,geom_,annotate),这三类就是实现一个函数一个图层的核心函数。
微调图型:严格意义上说,这一类函数不是再实现图层,而是在做局部调整。
scale_:直译为标尺,这就是与aes内的各种美学(shape、color、fill、alpha)调整有关的函数。
guides:调整所有的text。
coord_:调整坐标。
theme:调整不与数据有关的图的元素的函数。
4. 绘图
第一步:初始化。ggplot2风格的绘图的第一步就是初始化,说白了就是载入数据空间、选择数据以及选择默认aes。
p <- ggplot(data = , aes(x = , y = ))
data就是载入你要画的数据所在的数据框,指定为你的绘图环境,载入之后,就可以免去写大量的$来提取data.frame之中的向量。当然,如果你的数据都是向量,也可不指定,但是要在申明中标注data = NULL,不然就会得到不必要的报错。
第二个是重头戏,即aes,是美学(aesthetic)的缩写。这是在ggplot2初学者眼里最不能理解的东西,甚至很多老手也会在犹豫,什么时候要把参数写在aes里,什么时候要写在aes外。我们做一个简单的,不非常恰当的解释:任何与数据向量顺序相关,需要逐个指定的参数都必须写在aes里。这之后我们会进一步解释,现在我们初始化的时候,最好只是把关于位置的x和y指定一下就好。
第二部,绘制图层。
很多人在解释ggplot2的时候喜欢说,ggplot2绘图有两种函数,一类是geom_,绘图用的;一类是stat_,统计变换用的。这样说不是不对,只是很不恰当,很多人就会问出一些问题,比如,统计变换竟然是做运算用的,为什么可以用来画图?为什么stat_bin和geom_histgram画出来的图是一样,竟然一样,为什么要重复?
事实上,任何一个ggplot2图层都包括stat和geom俩部分,或者说两个步骤(其实还包括position)。 而stat_identity则表示不做任何的统计变换。
文章较长,点击直达我的 博客 ,浏览效果更好。
本文内容基本是来源于 STHDA ,这是一份十分详细的 ggplot2 使用指南,因此我将其翻译成中文,一是有助于我自己学习理解,另外其他R语言爱好者或者可视化爱好者可以用来学习。翻译过程肯定不能十全十美,各位读者有建议或改进的话,十分欢迎发 Email ( tyan@zju.edu.cn )给我。
ggplot2 是由 Hadley Wickham 创建的一个十分强大的可视化R包。按照 ggplot2 的绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象):
在 ggplot2 中有两个主要绘图函数:qplot()以及ggplot()。
由 ggplot2 绘制出来的ggplot图可以作为一个变量,然后由print()显示出来。
根据数据集, ggplot2 提供不同的方法绘制图形,主要是为下面几类数据类型提供绘图方法:
安装 ggplot2 提供三种方式:
加载
本文将使用数据集 mtcars 。
qplot()类似于R基本绘图函数plot(),可以快速绘制常见的几种图形:散点图、箱线图、小提琴图、直方图以及密度曲线图。其绘图格式为:
其中:
也可以添加平滑曲线
还有其他参数可以修改,比如点的形状、大小、颜色等
箱线图
小提琴图
点图
直方图
密度图
上文中的qplot()绘制散点图:
在ggplot()中完全可以如下实现:
改变点形状、大小、颜色等属性
绘图过程中常常要用到转换(transformation),这时添加图层的另一个方法是用stat_*()函数。
下例中的geom_density()与stat_density()是等价的
等价于
使用数据集wdata,先计算出不同性别的体重平均值
先绘制一个图层a,后面逐步添加图层
可能添加的图层有:
改变颜色
可以通过修改不同属性如透明度、填充颜色、大小、线型等自定义图形:
使用以下函数:
根据sex修改颜色,将sex映射给line颜色
修改填充颜色以及透明度
添加均值线以及手动修改颜色
将sex映射给颜色
手动修改颜色
y轴显示为密度
修改颜色以及线型
将sex映射给线颜色
修改填充颜色
使用数据集mtcars, 先创建一个ggplot图层
可能添加的图层有:
将变量cyl映射给点的颜色和形状
自定义颜色
可以添加回归曲线
散点图+回归线
使用loess方法
将变量映射给颜色和形状
使用数据集 faithful
实际上 geom_jitter() 是 geom_point(position="jitter") 的简称,下面使用数据集 mpg
增加抖动防止重叠
其中两个参数:
参数label用来指定注释标签
使用数据集 diamonds
创建ggplot图层,后面再逐步添加图层
可添加的图层有:
geom_bin2d() 将点的数量用矩形封装起来,通过颜色深浅来反映点密度
设置bin的数量
geom_hex()依赖于另一个R包 hexbin ,所以没安装的先安装:
修改bin的数目
主要是如何通过线来连接两个变量,使用数据集 economics 。
先创建一个ggplot图层,后面逐步添加图层
可添加的图层有:
使用数据集 ToothGrowth ,其中的变量len(Tooth length)是连续变量,dose是离散变量。
创建图层
可添加的图层有:
添加有缺口的箱线图
按dose分组映射给颜色
将dose映射给填充颜色
按supp进行分类并映射给填充颜色
添加中值点
与箱线图结合
将dose映射给颜色进行分组
添加中值点
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)