2010-09-24 316 views

回答

81

至少有两种方式在基本图实现这一点(我的例子是x轴,但工作同样为y轴):

  1. 使用par(xaxp = c(x1, x2, n))plot(..., xaxp = c(x1, x2, n))定义极限刻度线和刻度线之间的间隔数(n)的位置(x1 & x2)。因此,n+1是绘制的刻度线数量。 (只有在不使用对数刻度时才有效,因为对数刻度的行为请参见?par。)

  2. 您可以完全禁止绘制轴,并在后面添加刻度标记axis()
    要抑制轴的绘制,请使用plot(... , xaxt = "n")
    然后请致电axis()side,atlabelsaxis(side = 1, at = v1, labels = v2)。与side参考轴线的一侧(1 = x轴,2 = y轴),v1是含有蜱(的位置的矢量例如,c(1, 3, 5)如果您的轴线范围为0〜6,并且希望3马克)和v2包含指定刻度标记的标签的矢量(必须与v1的长度相同,例如,c("group a", "group b", "group c"))。见?axismy updated answer to a post on stats.stackexchange for an example of this method

+0

有没有办法控制R用于数字刻度标签的小数位数。我刚刚尝试了标签= c(0.0,0.5,1.0,1.5,2.0),但在图中标签为0,0.5,1,1.5等。有没有办法在所有标签上获得相同的小数位数?我尝试过标签= round(seq(0,2,0.5),1),但是整个数字仍然没有小数位。 – eipi10 2012-02-20 17:41:04

+1

尝试函数'formatC'或'prettyNum'来创建要传递给'labels'的字符向量。例如:'formatC(seq(0,2,0。5),digits = 1,format =“f”)' – Henrik 2012-02-21 13:25:59

+0

+1一直在寻找一段时间来找到它。结果发现'n'实际上是刻度标记'-1'的数目。我想从'1'到'9'的刻度线,并且必须设置'xaxp = c(1,9,8)',否则我不会得到想要的结果。 – ThomasH 2012-12-05 17:16:22

22

使用基础图形,最简单的方法是停止绘图轴的绘图功能,然后自己绘制它们。

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() 
+0

你好 我在x轴上有日期时间数据(chron) 在我的情况下,我认为它应该比写一行更好假设有25个完整的日期。 如果我想垂直写在x轴上的日期,我的意思是垂直。 欢呼声 – skan 2010-09-25 12:54:19

+1

看看图形参数'las' in?par,它可以添加到对'axis()'的调用中,并控制滴答标签的方向。例如。 'axis(side = 1,at = c(1,5,10),las = 2)'。您可能想要调查chron对象是否有'axis()'函数,或者考虑使用已经具有'axis()'函数(例如'axis.Date()')的R的Date Time类“')。 – 2010-09-25 23:01:02

3

我有一个数据集,其中时间为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 =...)给了我限制和增量的选择。

2

如果你不想R键添加小数或零,则可以从图纸x轴或y轴或同时使用... AXT停止。然后,您可以添加自己的刻度和标签:

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