Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R绘制所有轴标签(防止跳过某些轴标签)_R_Plot - Fatal编程技术网

R绘制所有轴标签(防止跳过某些轴标签)

R绘制所有轴标签(防止跳过某些轴标签),r,plot,R,Plot,当我用(轴(1,at=1:27,labels=labs[0:27])手动添加以下标签时,): 我得到以下信息: 如何强制绘制所有标签,以便不跳过1、3、5、6和11?(另外,为了获得额外的积分,如何将整个图像向下移动几个像素??axis告诉您: 代码尽量不绘制重叠的记号标签,因此将忽略与先前绘制的标签相邻或重叠的标签。例如,这可能导致每隔一个勾号被标记。(标记从左到右或从下到上绘制,标签之间至少留有“m”大小的空间。) 使用cex.axis,使标签足够小,可以在不重叠的情况下安装 labs &

当我用(
轴(1,at=1:27,labels=labs[0:27])手动添加以下标签时,
):

我得到以下信息:

如何强制绘制所有标签,以便不跳过1、3、5、6和11?(另外,为了获得额外的积分,如何将整个图像向下移动几个像素?

?axis告诉您:

代码尽量不绘制重叠的记号标签,因此将忽略与先前绘制的标签相邻或重叠的标签。例如,这可能导致每隔一个勾号被标记。(标记从左到右或从下到上绘制,标签之间至少留有“m”大小的空间。)

使用
cex.axis
,使标签足够小,可以在不重叠的情况下安装

labs <-c("0\n9.3%","1\n7.6%","2\n5.6%","3\n5.1%","4\n5.7%","5\n6.5%","6\n7.3%",
         "7\n7.6%","8\n7.5%","9\n7%", "10\n6.2%","11\n5.2%","12\n4.2%",12:27)
plot(1:27,xaxt = "n")
axis(side=1, at=1:27, labels=labs[0:27],cex.axis=0.35)

labs@PLapointe刚刚发布了我要说的内容,但忽略了额外的答案


axis
中设置
padj=0.5
以稍微向下移动标签。

如果要强制显示所有标签,即使它们非常接近或重叠,也可以通过分别调用
axis
函数添加奇数和偶数轴标签来“欺骗”R以显示它们,如下所示:

labs <-c("0\n9.3%","1\n7.6%","2\n5.6%","3\n5.1%","4\n5.7%","5\n6.5%","6\n7.3%",
         "7\n7.6%","8\n7.5%","9\n7%", "10\n6.2%","11\n5.2%","12\n4.2%",13:27)
n=length(labs)
plot(1:28, xaxt = "n")
axis(side=1, at=seq(1,n,2), labels=labs[seq(1,n,2)], cex.axis=0.6)
axis(side=1, at=seq(2,n,2), labels=labs[seq(2,n,2)], cex.axis=0.6)

labs虽然这里有一些很好的答案,但OP除了拟合所有轴标签外,不想调整标签的大小或更改有关绘图的任何内容。这很烦人,因为通常会有足够的空间来放置所有的axis标签

这是另一个解决方案。绘制不带轴的绘图,然后添加带空标签的记号。将记号的位置存储在对象中,这样就可以遍历每个记号并将其放置在轴上的正确位置

绘图(1:10,1:10,yaxt=“n”)
轴刻度=轴(2,轴刻度(2),标签=重复(“,长度(轴刻度(2)))

对于(i in axis_ticks)axis(2,i)

我遇到了一个类似的问题,我想错开标签,让它们在打印时不会丢失一些。我创建了两组记号,将第二组记号显示在另一组记号的下方,使其看起来像是交错的

xaxis_stagger = function(positions,labels) {
  odd=labels[seq(1,length(labels),2)]
  odd_pos=positions[seq(1,length(positions),2)]
  even=labels[seq(2,length(labels),2)]  
  even_pos=positions[seq(2,length(positions),2)]
  axis(side=1,at=odd_pos,labels=odd)
  axis(side=1,at=even_pos,labels=even,padj=1.5)
}

因此,您需要给出记号的位置以及这些记号的标签,然后将其重新组织为两组轴,并在原始绘图上进行绘图。原始绘图将使用xaxt=“n”完成。

可能通过反复使用
mapply
调用
axis
,一次绘制并标记一个勾号

例如,考虑以下数据:

x = runif(100)*20
y = 10^(runif(100)*3)
y
的公式可能看起来有点奇怪;它给出了分布在三个数量级上的随机数,这样数据将均匀分布在y轴为对数刻度的绘图上。这将有助于通过计算我们在记录轴上的好记号位置来演示axTicks()的实用性

默认情况下:

plot(x, y, log = "y")
返回:

请注意,缺少100和1000个标签

我们可以使用:

plot(x, y, log = "y", yaxt = "n")
mapply(axis, side = 2, at = axTicks(2), labels = axTicks(2))
它为axTicks()返回的每个记号位置调用一次axis()
,从而一次绘制一个记号。结果是:

我喜欢这个解决方案的地方在于,它只使用一行代码来绘制轴,它精确地打印出默认的轴R,除了标记了所有的记号,并且当调整绘图的大小时,标签不会移动到任何地方:

我不能说轴在调整大小的示例中有用,但它说明了轴标签是永久的

对于第一个(默认)绘图,请注意,在调整大小时,R将重新计算记号位置

对于第二个(始终标记)绘图,调整图像大小时不会重新计算记号的数量和位置。由轴刻度计算的轴刻度取决于首次绘制绘图时显示窗口的大小

如果要强制特定的勾选位置,请尝试以下操作:

plot(x, y, log = "y", yaxt = "n")
mapply(axis, side = 2, at = c(1,10,100, 1000), labels = c("one", "ten", "hundred", "thousand"))
这将产生:

axis()
包括一个
间隙.axis
参数,用于控制何时省略标签。将此设置为负数将强制显示所有标签,即使它们重叠

axis()
padj
参数控制绘制单个轴时的y偏移

par(mgp=c(3,2,0)
将在打印会话期间调整所有轴标签的位置:第二个值(此处为
2
,默认值
1
)控制标签的位置

#设置轴文本位置,包括Y轴
par(mgp=c(3,2,0))
#密谋
绘图(1:12,1:12,log='x',ann=FALSE,axes=FALSE)
#一些数字未绘制:
轴(1,1:12)
#绘制所有数字,并进行手动偏移
轴(1,1:12,间隙轴=-100,padj=0.5)

是否确实要在索引中包含0?另一种方法是使标签与
绘图(…,las=2)
par(las=2);绘图(…)
+1垂直,用于上一个旋转轴解决方案。如果使用
绘图(…,axis=FALSE,…)
轴(1,…。)
,然后将选项添加到axis:
axis(1,…,las=2)
非常感谢。cex.axis非常有帮助。注意:我的x轴由字符串组成,因此我改为拨弄
cex.names
,它在最后给了我所需的输出。
plot(x, y, log = "y", yaxt = "n")
mapply(axis, side = 2, at = c(1,10,100, 1000), labels = c("one", "ten", "hundred", "thousand"))