R:设定轴刻度&范围包括具有漂亮休息的所有点

时间:2014-09-22 09:33:30

标签: r plot range axis-labels axes

我有一个动态构建线图的功能,因此需要用公式解决我的问题而不是手动设置范围。 (请注意专家:我已经为自己和其他人写了这个逻辑进展 - 道歉这意味着更多的文字;我发现R帮助特别碎片化并且对绘图没有帮助,所以希望这会对其他人有帮助。)

我生成的线图的轴具有正确数量的刻度间距(默认情况下,假定为“漂亮的断点”?)但轴范围并不包含整个数据范围 - 有些在外面。 (您可以忽略轴上方的地毯图,但第一个和最后一个显示数据范围)

x axis length

所以我想要的是x轴宽度包含所有数据,但保留漂亮的中断,即将最小/最大刻度点分散到极值或超过极值的漂亮值...理想情况下没有多少工作!我并不是说听起来很懒惰,但感觉就像是一种普遍的愿望。我正在阅读at,包括prettyaxTicksxaxt以及xaxsxpd

plot中,xaxs控制实际数据线在图中占据的宽度,“i”将其扩展到边距,“r”(或默认值)将其压缩一点。知道这很酷,但可以说不是人们所期望的“轴心”。 (此处设置为“r”/默认值)

xaxt的帮助让我们知道你用它来关闭轴绘图,但没有说明它做了什么/它们的其他类型是什么。

axis中,at控制轴线长度,默认为axTicks,默认为xaxp。从表面上看,xaxp就是我想要的,允许用户指定c(x1, x2, n),但默认x1& x2位于数据范围内,而不是包含它。

axis帮助说:

“轴线从at的最低值到最高值绘制,但会在绘图区域剪切。默认情况下,只绘制从绘图区域内的点绘制的刻度线(最多为绘制了舍入误差的容差),但是刻度及其标签可能会延伸到绘图区域之外。使用xpd = TRUExpd = NA允许轴进一步延伸“

xpd = TRUExpd = NA似乎都没有改变。 xpd帮助说:

“如果为FALSE,所有绘图都会剪切到绘图区域,如果为TRUE,则所有绘图都会剪切到图形区域,如果为NA,则所有绘图都会剪切到设备区域”

即。 axis帮助说xpd控制轴扩展,xpd帮助说xpd控制绘图剪辑。

xaxp帮助说“请参阅axTicks()获取此”

的纯R实现

axTicks“计算漂亮的tickmark位置,与R在内部的方式相同”,默认为相关方的at值,即par("xaxp")

pretty似乎非常复杂,很可能是R在内部用于计算应用于at时的默认节距间距的内容;能够编辑那个n参数并没有别的可能会很酷,即根据我的绘图区域大小指定所需的间隔数,但如果这意味着花费一天反编译,我很乐意离开,理解,然后手动重新编译pretty!另外,我不知道在n中,n的刻度是否与xaxp中的xaxt完全相同,如果是这样,则优先。

所以:R帮助似乎使用“轴”来表示轴(axisxaxs)和绘图(xpdpar),没有迹象表明是否该参数由plotaxisaxis控制,或者可以通过其中任何一种的组合控制(像往常一样)。在尝试查找负责的元素时,ataxTicks,其中xaxp表示axTicks,其中at表示par(=循环)。

作为一个次要的,更广泛的元问题:我是否在试图找到绘制问题的答案方面做错了什么?我阅读和阅读,帮助是如此经常缺乏,混乱,矛盾,并通常导致一个直觉黑洞,关于是否应该由plotaxispng(filename="A.png", width=4*480, height=4*480, units="px", pointsize=80, bg="white", res=NA, family="", type="cairo-png") par(mar=c(1.32,2,0.4,0.5), fig=c(0,1,0,1), las=1, lwd=8, bty="n", mgp=c(2,0.5,0), xpd=NA) plot(ChickWeight[,1:2],type="l",xaxs="i",yaxs="i") dev.off() 控制某些事情。先谢谢你们。对不起,这很长,我真的认为这将是一个非常简单的选择。

最小可重复的例子:

{{1}}

2 个答案:

答案 0 :(得分:1)

我们的想法是画出你自己的轴,而不是让情节使用默认的。这是一个似乎有用的例子,

xx <- labeling::extended(min(ChickWeight[,1]), max(ChickWeight[,1]),
                         3, only.loose=TRUE) 
yy <- labeling::extended(min(ChickWeight[,2]), max(ChickWeight[,2]),
                         3, only.loose=TRUE) 
plot(range(xx),range(yy), t="n", xaxt="n", yaxt="n")
points(ChickWeight[,1:2],type="p")
axis(1, at = xx)
axis(2, at = yy)

答案 1 :(得分:1)

最简单的方法是添加xlim和/或ylim参数,将它们设置为超出数据范围的某个值。然后R仍将使用它的默认方法来查找漂亮的刻度位置。 对于您显示的数字,xlim = c(0, 60000), ylim = c(-.3,.3)可能就足够了。

(我知道这是一个旧线程,但我将这个答案添加到完整性中)