如何使用 ggplot2

如何使用 ggplot2,第1张

总结来说有以下几点:

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映射给颜色进行分组

添加中值点


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11673041.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存