【问题标题】:How to specify the actual x axis values to plot as x axis ticks in R如何指定实际的 x 轴值以绘制为 R 中的 x 轴刻度
【发布时间】:2012-07-31 07:40:37
【问题描述】:

我正在 R 中创建一个绘图,但我不喜欢 R 绘制的 x 轴值。

例如:

x <- seq(10,200,10)
y <- runif(x)

plot(x,y)

这会在 X 轴上绘制具有以下值的图形:

50, 100, 150, 200

但是,我想将存储在变量 x 中的 20 个值 10,20, 30 ... 200 绘制为 X 轴值。我浏览了无数博客和简洁的手册 - 经过数小时的搜索,我最接近找到有用的是以下(总结)说明:

  1. 调用plot()par(),指定参数xaxt='n'
  2. 致电axis() 例如axis(side = 1, at = seq(0, 10, by = 0.1), labels = FALSE, tcl = -0.2)

我试过了,结果图根本没有 x 轴值。有没有可能有人知道如何做到这一点?我不敢相信以前没有人尝试过这样做。

【问题讨论】:

    标签: r plot


    【解决方案1】:

    您可以在?axis 的帮助页面中找到问题的答案。

    这是帮助页面示例之一,已根据您的数据进行了修改:

    选项 1:使用xaxp 定义轴标签

    plot(x,y, xaxt="n")
    axis(1, xaxp=c(10, 200, 19), las=2)
    

    选项 2:使用 atseq() 定义标签:

    plot(x,y, xaxt="n")
    axis(1, at = seq(10, 200, by = 10), las=2)
    

    这两个选项产生相同的图形:


    附言。由于您有大量标签,因此您必须使用其他参数来使文本适合绘图。我使用las 来旋转标签。

    【讨论】:

      【解决方案2】:

      仔细查看?axis 文档。如果您查看labels 参数的描述,您会发现它是:

      "a logical value specifying whether (numerical) annotations are 
      to be made at the tickmarks,"
      

      所以,只需将其更改为 true,您就会得到刻度标签。

      x <- seq(10,200,10)
      y <- runif(x)
      plot(x,y,xaxt='n')
      axis(side = 1, at = x,labels = T)
      # Since TRUE is the default for labels, you can just use axis(side=1,at=x)
      

      请注意,如果您不拉伸窗口宽度,则 R 可能无法将所有标签写入其中。玩一下窗口宽度,您就会明白我的意思。


      您在查找文档时遇到这样的麻烦真是太糟糕了!你的搜索词是什么?尝试在 Google 中输入r axis,您将获得的第一个链接是Quick R page that I mentioned earlier。向下滚动到“Axes”,你会得到一个关于如何做的非常好的小指南。您可能应该先检查那里是否有任何绘图问题,这比等待 SO 回复要快。

      【讨论】:

      • 小心。 T 并不总是TRUE。最好指定labels = TRUE。此外,谷歌搜索结果将取决于您的搜索历史。有关如何搜索 r 的提示,请参阅 how-to-search-for-r-materials
      【解决方案3】:

      希望此编码对您有所帮助:)

      plot(x,y,xaxt = 'n')
      
      axis(side=1,at=c(1,20,30,50),labels=c("1975","1980","1985","1990"))
      

      【讨论】:

        【解决方案4】:

        在绘制时间序列的情况下,命令ts.plot 需要与xaxt="n" 不同的参数

        require(graphics)
        ts.plot(ldeaths, mdeaths, xlab="year", ylab="deaths", lty=c(1:2), gpars=list(xaxt="n"))
        axis(1, at = seq(1974, 1980, by = 2))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-16
          • 2020-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-03
          • 2012-12-12
          • 2012-12-24
          相关资源
          最近更新 更多