67

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

例如:

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

plot(x,y)

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

50, 100, 150, 200

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

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

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

4

4 回答 4

100

您可以在 的帮助页面中找到问题的答案?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)

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

在此处输入图像描述


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

于 2012-08-02T10:54:33.187 回答
6

仔细查看?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 可能无法写入所有标签。使用窗口宽度,您会明白我的意思。


太糟糕了,您很难找到文档!你的搜索词是什么?尝试输入r axis谷歌,你会得到的第一个链接是我之前提到的 Quick R 页面。向下滚动到“Axes”,你会得到一个关于如何做的非常好的小指南。您可能应该先检查那里是否有任何绘图问题,这比等待 SO 回复要快。

于 2012-08-02T10:56:14.870 回答
4

希望这个编码能帮助你:)

plot(x,y,xaxt = 'n')

axis(side=1,at=c(1,20,30,50),labels=c("1975","1980","1985","1990"))
于 2017-03-13T11:22:19.323 回答
0

在绘制时间序列的情况下,该命令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))
于 2018-03-25T07:11:15.467 回答