更改绘图轴上刻度线的间距?


Answers:


95

基础图中至少有两种方法可以实现此目的(我的示例适用于x轴,但适用于y轴):

  1. 使用par(xaxp = c(x1, x2, n))plot(..., xaxp = c(x1, x2, n))定义极限刻度线的位置(x1x2)以及刻度线之间的间隔数(n)。因此,n+1绘制的刻度线数。(这仅在不使用对数标度的情况下有效,有关对数标度的行为,请参见?par。)

  2. 您可以完全取消轴的绘制,以后再使用来添加刻度线axis()
    要抑制轴的绘制,请使用plot(... , xaxt = "n")
    然后调用axis()sideatlabelsaxis(side = 1, at = v1, labels = v2)。以side轴的侧面(1 = x轴,2 = y轴)为参考,v1是包含刻度线位置的向量(例如,c(1, 3, 5)如果您的轴范围是0到6,并且您需要三个标记),并且v2一个包含指定刻度线标签的向量(长度必须与v1,例如相同c("group a", "group b", "group c"))。有关此方法的示例,请参阅?axis我对stats.stackexchange上的帖子的更新答案


有没有一种方法可以控制R用于数字刻度标签的小数位数。我刚刚尝试了label = c(0.0,0.5,1.0,1.5,2.0),但是在图中,标签分别是0、0.5、1、1.5等。是否有办法在所有标签上获得相同的小数位数?我尝试了label = round(seq(0,2,0.5),1),但整数仍然没有小数位。
eipi10 2012年

2
尝试函数formatCprettyNum创建要传递到的字符向量labels。例如:formatC(seq(0,2,0.5), digits = 1, format = "f")
Henrik

1
+1已有一段时间寻找此内容。事实证明,这n实际上是刻度线的数量-1。我想要从1到的刻度线,9并且必须设置,xaxp = c(1, 9, 8)否则我将无法获得理想的结果。
ThomasH

对我来说,它不起作用par(xaxp..)。仅当我将其放入plot(xaxp...)
Daniel Bonetti

31

对于基本图形,最简单的方法是从绘图轴停止绘图功能,然后自己绘制它们。

plot(1:10, 1:10, axes = FALSE)
axis(side = 1, at = c(1,5,10))
axis(side = 2, at = c(1,3,7,10))
box()

您好,我在x轴上有日期时间数据,(时间)就我而言,我认为这比写一行包含25个完整日期的行更好。如果我要在x轴上垂直写日期,那是垂直的意思。干杯
skan

1
查看las可以添加到的调用中的par中的图形参数,该参数axis()控制刻度标签的方向。例如axis(side = 1, at = c(1,5,10), las = 2)。您可能想调查是否有axis()用于chron对象的函数,或者考虑使用R的Date Time类,它们已经具有axis()函数(例如,axis.Date()对于“ Date”类)。
加文·辛普森

6

我有一个数据集,其中时间作为x轴,强度作为y轴。我首先需要使用以下命令删除所有默认轴(轴标签除外):

plot(Time,Intensity,axes=F)

然后,使用以下命令重建图的元素:

box() # create a wrap around the points plotted
axis(labels=NA,side=1,tck=-0.015,at=c(seq(from=0,to=1000,by=100))) # labels = NA prevents the creation of the numbers and tick marks, tck is how long the tick mark is.
axis(labels=NA,side=2,tck=-0.015)
axis(lwd=0,side=1,line=-0.4,at=c(seq(from=0,to=1000,by=100))) # lwd option sets the tick mark to 0 length because tck already takes care of the mark
axis(lwd=0,line=-0.4,side=2,las=1) # las changes the direction of the number labels to horizontal instead of vertical.

因此,at = c(...)指定放置刻度线的仓位集合。在这里,我想将标记分别设置为0、100、200,...,1000。这seq(from =...,to =...,by =...)让我可以选择限制和增量。


3

而且,如果您不希望R添加小数或零,则可以使用... axt阻止它绘制x轴或y轴或两者。然后,您可以添加自己的刻度和标签:

plot(x, y, xaxt="n")
plot(x, y, yaxt="n")
axis(1 or 2, at=c(1, 5, 10), labels=c("First", "Second", "Third"))

当然,您可以flag使用yaxt=flag BUT变量以编程方式打开和关闭此功能,其窍门是,如果要打开标准标签,然后设置flag <- "s",如果不希望再使用标准标签flag <- "n" (添加此标签,因为它花了我一个而找到“ s”)
Clem Wang

3

我刚刚发现了Hmisc软件包:

包含许多对数据分析有用的功能,高级图形,实用程序操作,用于计算样本大小和功效,导入和注释数据集,估算缺失值,高级表制作,变量聚类,字符串处理,R对象转换为LaTeX的功能和html代码,以及重新编码变量。

library(Hmisc)    
plot(...)
minor.tick(nx=10, ny=10) # make minor tick marks (without labels) every 10th
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.