如何在R中指定实际的x轴值作为x轴刻度。

75

我正在使用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轴值。有人知道如何做到这一点吗?我不相信以前没有人尝试过这个。

4个回答

110

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

下面是帮助页面的一个示例,已使用你的数据进行修改:

选项一:使用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旋转标签。


7
希望这个编码对你有所帮助 :)
plot(x,y,xaxt = 'n')

axis(side=1,at=c(1,20,30,50),labels=c("1975","1980","1985","1990"))

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可能无法写入所有标签。尝试调整窗口宽度,您就会明白我的意思。


很遗憾你在查找文档时遇到了困难!你用的搜索词是什么?尝试在Google中键入r axis,第一个链接将是我之前提到的Quick R页面。向下滚动到“Axes”部分,你会得到一个非常好的小指南,告诉你如何做。对于任何绘图问题,你应该首先检查那里,这比等待SO回复更快。

3
注意,T并不总是表示TRUE。最好指定labels = TRUE。另外,谷歌搜索结果会受到你的搜索历史记录的影响。有关如何搜索[R]的提示,请参见how-to-search-for-r-materials - Andrie

1

如果要绘制时间序列图,命令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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接