我有一个动态构建线图的功能,因此需要用公式解决我的问题而不是手动设置范围。 (请注意专家:我已经为自己和其他人写了这个逻辑进展 - 道歉这意味着更多的文字;我发现R帮助特别碎片化并且对绘图没有帮助,所以希望这会对其他人有帮助。)
我生成的线图的轴具有正确数量的刻度间距(默认情况下,假定为“漂亮的断点”?)但轴范围并不包含整个数据范围 - 有些在外面。 (您可以忽略轴上方的地毯图,但第一个和最后一个显示数据范围)
所以我想要的是x轴宽度包含所有数据,但保留漂亮的中断,即将最小/最大刻度点分散到极值或超过极值的漂亮值...理想情况下没有多少工作!我并不是说听起来很懒惰,但感觉就像是一种普遍的愿望。我正在阅读at
,包括pretty
和axTicks
,xaxt
以及xaxs
和xpd
。
在plot
中,xaxs
控制实际数据线在图中占据的宽度,“i”将其扩展到边距,“r”(或默认值)将其压缩一点。知道这很酷,但可以说不是人们所期望的“轴心”。 (此处设置为“r”/默认值)
xaxt
的帮助让我们知道你用它来关闭轴绘图,但没有说明它做了什么/它们的其他类型是什么。
在axis
中,at
控制轴线长度,默认为axTicks
,默认为xaxp
。从表面上看,xaxp
就是我想要的,允许用户指定c(x1, x2, n)
,但默认x1
& x2
位于数据范围内,而不是包含它。
axis
帮助说:
“轴线从at
的最低值到最高值绘制,但会在绘图区域剪切。默认情况下,只绘制从绘图区域内的点绘制的刻度线(最多为绘制了舍入误差的容差),但是刻度及其标签可能会延伸到绘图区域之外。使用xpd = TRUE
或xpd = NA
允许轴进一步延伸“
xpd = TRUE
和xpd = NA
似乎都没有改变。 xpd帮助说:
“如果为FALSE,所有绘图都会剪切到绘图区域,如果为TRUE,则所有绘图都会剪切到图形区域,如果为NA,则所有绘图都会剪切到设备区域”
即。 axis
帮助说xpd
控制轴扩展,xpd
帮助说xpd
控制绘图剪辑。
xaxp
帮助说“请参阅axTicks()
获取此”
axTicks
“计算漂亮的tickmark位置,与R在内部的方式相同”,默认为相关方的at
值,即par("xaxp")
。
pretty
似乎非常复杂,很可能是R
在内部用于计算应用于at
时的默认节距间距的内容;能够编辑那个n
参数并没有别的可能会很酷,即根据我的绘图区域大小指定所需的间隔数,但如果这意味着花费一天反编译,我很乐意离开,理解,然后手动重新编译pretty
!另外,我不知道在n
中,n
的刻度是否与xaxp
中的xaxt
完全相同,如果是这样,则优先。
所以:R帮助似乎使用“轴”来表示轴(axis
,xaxs
)和绘图(xpd
,par
),没有迹象表明是否该参数由plot
,axis
,axis
控制,或者可以通过其中任何一种的组合控制(像往常一样)。在尝试查找负责的元素时,at
说axTicks
,其中xaxp
表示axTicks
,其中at
表示par
(=循环)。
作为一个次要的,更广泛的元问题:我是否在试图找到绘制问题的答案方面做错了什么?我阅读和阅读,帮助是如此经常缺乏,混乱,矛盾,并通常导致一个直觉黑洞,关于是否应该由plot
,axis
或png(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}}
答案 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)
可能就足够了。
(我知道这是一个旧线程,但我将这个答案添加到完整性中)