R:设置轴刻度&;范围包括所有点和漂亮的断点

R:设置轴刻度&;范围包括所有点和漂亮的断点,r,plot,range,axis-labels,axes,R,Plot,Range,Axis Labels,Axes,我有一个函数,它可以动态构建线图,因此需要用公式来解决我的问题,而不是手动设置范围。(专家注意:我已经为自己和其他人在后面的逻辑级数中写了这篇文章——抱歉这意味着更多的文本;我发现R帮助特别零碎,对策划没有帮助,所以希望这能帮助其他人) 我生成的直线图的轴具有正确的刻度间距(默认值,假定为“漂亮的打断”),但轴范围不包括整个数据范围-一些在范围之外。(您可以忽略轴上方的地毯图小数点,尽管第一个和最后一个小数点显示数据范围) 因此,我希望x轴宽度包含所有数据,但保留漂亮的中断,即,将最小/最大勾

我有一个函数,它可以动态构建线图,因此需要用公式来解决我的问题,而不是手动设置范围。(专家注意:我已经为自己和其他人在后面的逻辑级数中写了这篇文章——抱歉这意味着更多的文本;我发现R帮助特别零碎,对策划没有帮助,所以希望这能帮助其他人)

我生成的直线图的轴具有正确的刻度间距(默认值,假定为“漂亮的打断”),但轴范围不包括整个数据范围-一些在范围之外。(您可以忽略轴上方的地毯图小数点,尽管第一个和最后一个小数点显示数据范围)

因此,我希望x轴宽度包含所有数据,但保留漂亮的中断,即,将最小/最大勾号点分散到位于或超过极值的好值。。。理想情况下,没有大量的工作!我并不是想说我懒惰,但我觉得这是一种共同的愿望。我在上读到了
,包括
pretty
axTicks
,还有
xaxt
xaxs
xpd

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

xaxt的帮助
让人知道这是用来关闭轴打印的,但没有说明它还可以做什么/其他类型是什么

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

axis
帮助说明:

“轴线是从<代码>处的<代码>的最低值到最高值绘制的,但将在打印区域进行剪裁。默认情况下,仅从打印区域内的点绘制记号(最大舍入误差公差)已打印,但记号及其标签可能会延伸到打印区域之外。使用
xpd=TRUE
xpd=NA
允许轴进一步延伸”

无论是
xpd=TRUE
还是
xpd=NA
似乎都不会改变任何东西。xpd帮助说明:

如果为FALSE,则所有打印均剪裁到打印区域;如果为TRUE,则所有打印均剪裁到地物区域;如果为NA,则所有打印均剪裁到设备区域

也就是说,
axis
帮助说明
xpd
控制轴扩展,
xpd
帮助说明
xpd
控制打印剪切

xaxp
帮助中说“请参见
axTicks()
,以了解此功能的纯R实现”

axTicks
“以与R在内部相同的方式计算相当多的记号位置”,并默认为相关侧的
at
值,即
par(“xaxp”)

pretty
看起来非常复杂,这很可能是
R
在应用于
at
时内部用来计算默认勾号间距的方法;如果能够编辑该参数的
n
参数,而不编辑其他参数,即指定给定绘图区域大小的所需间隔数,那就太酷了,但如果这意味着花一天的时间进行反编译、理解,然后手动重新编译
pretty
,我很乐意离开!另外,我不知道pretty中的ticks的
n
是否与
xaxp
中的
n
做了相同的事情,如果是这样的话,哪个优先

因此:R help似乎使用“axis”来表示axis(
xaxt
axis
)和plotting(
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()

其思想是绘制自己的轴,而不是让plot使用默认轴。这是一个似乎有效的例子

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)

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


(我知道这是一条老线索,但我要补充完整性的答案)

我没有花时间阅读所有内容,但是
scales::extended_breaks()
应该在这里有所帮助。谢谢。我想你不知道任何地方是否有任何关于如何使用这个的信息,你知道吗?i、 e.par/图/轴?我尝试在绘图中添加“extended_breaks(n=7)”,但得到了:“标题中的错误(…):无法将类型“closure”强制为类型“character”的向量”。谢谢。如果你发布一个最小的可复制的例子,可能会有人告诉你已经完成了。在图中加上“扩展的中断(n=7)”不做任何事情,到PAR找不到函数