ggplot2设置坐标轴间隔(ggplot设置坐标轴刻度)

2022-11-13 23:02:27 0

ggplot2设置坐标轴间隔(ggplot设置坐标轴刻度)

作者:黄宝臣数据科学/科学哲学硕士/本科生物狗

https://www.zhihu.com/question/24779017/answer/38750383

前言

上篇我们讲如何高效地学好R?本篇我们谈谈ggplot2,主要讲理念的东西,希望大家有一定经验的再来看此答案。

  • ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离;
  • ggplot2是按图层作图;
  • ggplot2保有命令式作图的调整函数,使其更具灵活性;
  • ggplot2将常见的统计变换融入到了绘图中。

1.ggplot2的逻辑

ggplot2的逻辑在我看来其实是真正实现了一个图层叠加的概念:一句语句代表一张图,然后再有最小的单元图层。这个与其他命令式的绘图完全不同,来做个比较:

#这是基于graphic包里例子

x <- rnorm与终止(一句语句一幅图);其二,图层之间的叠加是靠“+”号实现的,越后面其图层越高。

其次就是对于分组数据的处理,其实这方面,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的缩写。这是在ggplot2初学者眼里最不能理解的东西,甚至很多老手也会在犹豫,什么时候要把参数写在aes里,什么时候要写在aes外。我们做一个简单的,不非常恰当的解释:任何与数据向量顺序相关,需要逐个指定的参数都必须写在aes里。这之后我们会进一步解释,现在我们初始化的时候,最好只是把关于位置的x和y指定一下就好。

很多人在解释ggplot2的时候喜欢说,ggplot2绘图有两种函数,一类是geom_,绘图用的;一类是stat_,统计变换用的。这样说不是不对,只是很不恰当,很多人就会问出一些问题,比如,统计变换竟然是做运算用的,为什么可以用来画图?为什么stat_bin和geom_histgram画出来的图是一样,竟然一样,为什么要重复?

事实上,任何一个ggplot2图层都包括stat和geom俩部分,或者说两个步骤(其实还包括position)。 而stat_identity则表示不做任何的统计变换。

x <- c这个点的数据事实上是有20个的,但由于没做统计转换:

p <- ggplot,qsec为numeric变量,因此,应该选择连续型的标尺,而不是分组染色。然后开始绘制,读取mtcars$mpg[1]、mtcars$wt[1],确定位置,然后为其染成mtcars$qsec[1]颜色;再绘制第二点。

因此,aes里的美学特征其实就是按照向量顺序指定每个位置的美学特征,大家可以比较tapply函数的写法。

好了,现在问题就来了。我想为所有点的颜色都染成绿色,怎么办?其实很简单,如果不需要指定这么一个染色的顺序,而选择将整个图层染成一种颜色,则只需要将color写在aes外:

p + geom_point:往往只有x、y指定位置,有shape但没有fill

  • 线。

    所有注释的实现都是通过annotate函数实现的,其实annotate就是一个最简单的geom_单元,它一次只添加一个位置上的图形(可以通过设置向量来实现同时绘制多个图形,但这个理念和注释的理念有所偏差)。annotate的geom就是指定注释的类型,其属性按照geom的不同而发生变化。

    这里的调整主要是使用微调图形这大类的函数做美学特征、坐标轴、标题、绘图主题的调整。这部分也就是继承了命令式作图的思想,使ggplot2的灵活性增加。

    如何搜索你要用什么美学特征调整函数,其实就是按照美学特征的名字来,例如,你要调整的是fill,就找scale_fill_之后就有一些不同的染色方法(关于色彩,如果有时间还会添加相关知识);调整的是横坐标标尺,就找scale_x_然后后面跟上你的横坐标类型;其他雷同。

    在调整主题这方面,值得褒奖的是,theme函数其实最妙的地方是将对于数据相关的美学调整和与数据无关的美学调整分离了。譬如说,我们要改变x轴的颜色,或者panel的底色,这个其实与数据处理无关,这种分离就会使得我们可以如此流程化地操作作图,而不需要在考虑数据的时候还要关注到与数据无关的美学参数。有人有时候会觉得ggplot2很奇怪的地方就是为什么调整legend的时候,有时要用scale_,有时又要用theme,其实这都是对于ggplot2这个设计理念的不理解,作者的设计思路是要将数据处理与数据美学分开,数据美学与数据无关的调整分开。

    其次,theme函数采用了四个简单地函数来调整所有的主题特征:element_text调整字体,element_line调整主题内的所有线,element_rect调整所有的块,element_blank清空。这种设计相当地棒。

    ggplot(data = , aes(x = , y = )) +

    geom_XXX(...) + ... + stat_XXX(...) + ... +

    annotate(...) + ... +

    scale_XXX(...) + coord_XXX(...) + guides(...) + theme(...)

    5.ggplot2的一些缺点

    • 公式支持不好,自带的plotmath公式无法满足很多需求
    • 无法针对多个legends进行调整

    - END -

    小问

    你是如何使用ggplot2的?

    关键字:  ggplot2设置坐标轴间隔  ggplot设置坐标轴刻度  ggplot函数在哪个包  ggplot2怎么安装  ggplot画折线图