gpt4 book ai didi

r - 在 R lattice xyplot 上分别控制 Axis 刻度和轴线

转载 作者:行者123 更新时间:2023-12-04 03:59:15 32 4
gpt4 key购买 nike

我怎样才能去掉 xyplot 周围的盒子? ,同时保持 Axis 刻度刻度线?本着 Edward Tufte 极简主义数据图形美学的精神,这些轴线是“非数据墨水”,可以(应该?)被“删除”。

library(lattice)
my.df <- data.frame(x=-10:10)
my.df$y <- my.df$x^2
xyplot(y~x,data=my.df)

standard xyplot output

似乎格子显示参数(例如 axis.line$col )同时控制轴线和 Axis 刻度:
xyplot(y~x,data=my.df,
par.settings=list(axis.line=list(col="transparent")))

with axis.line$col="transparent"

...这不是想要的结果,所以看起来没有一种简单的方法可以在离开盒子时关闭线路。

我能想到的最好的方法是蛮力破解,我使用 panel.segments 手动构建刻度线:
at.x=pretty(c(-10,10))
at.y=pretty(c(0,100))
xyplot(y~x,data=my.df,
par.settings=list(axis.line=list(col="transparent")),
scales=list(x=list(at=at.x,labels=at.x),
y=list(at=at.y,labels=at.y)),
panel=function(...){
panel.xyplot(...)
panel.segments(x0=at.x,x1=at.x,y0=-4,y1=-2)
panel.segments(x0=-11.5,x1=-11,y0=at.y,y1=at.y)
}
)

hand-made tick marks with panel.segments

这接近于预期的结果,但是要使刻度线的长度合理并从数据点偏移一个“不错的”距离,需要进行相当多的摆弄。这些值不会从一个图形转换为下一个图形。另外,请注意 Axis 标签现在距离刻度线太远了。我确信有一种方法可以减少填充,但这只会使代码更丑陋且更不便携。

那么,如何才能只抑制构成绘图区域周围“框”的线条,同时保持刻度线和 Axis 标签完好无损呢?如果这种方法也可以用来抑制一些但不是所有的线(例如,保留左边和下面的线,但抑制顶部和右边的线),则可以加分。

最佳答案

这仍然有点hacky,但至少您不必手动进行任何计算。它使用 par.settings 的组合和自定义 axis带参数的函数 line.col并通过调用 trellis.par.set 临时更改轴线颜色:

编辑 (删除了不必要的格子设置更改)

xyplot(y~x,data=my.df, par.settings = list(axis.line = list(col = "transparent")),
# Pass custom axis function to argument 'axis'
axis = function(side, line.col = "black", ...) {
# Only draw axes on the left and bottom
if(side %in% c("left","bottom")) {
# Call default axis drawing function
axis.default(side = side, line.col = "black", ...)
}
}
)

此刻,我想出了为什么 line.col = "black"在自定义 Axis 函数的参数中是必需的。我的猜测是它与与省略号 ( ... ) 匹配的参数有关。也许明天我会更聪明,找到真正的原因。

这导致:

enter image description here

关于r - 在 R lattice xyplot 上分别控制 Axis 刻度和轴线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12901396/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com