【发布时间】:2012-10-05 18:25:27
【问题描述】:
如何在保留轴刻度刻度线的同时删除 xyplot 周围的框?本着 Edward Tufte 极简数据图形美学的精神,这些轴线是“非数据墨水”,可以(应该?)被“擦除”。
library(lattice)
my.df <- data.frame(x=-10:10)
my.df$y <- my.df$x^2
xyplot(y~x,data=my.df)
似乎格子显示参数(例如axis.line$col)同时控制轴线和轴刻度:
xyplot(y~x,data=my.df,
par.settings=list(axis.line=list(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)
}
)
这接近于预期的结果,但是要使刻度线的长度合理并从数据点偏移“不错”的距离,需要进行大量的调整。这些值不会从一个图形转换为下一个图形。另外,请注意轴标签现在距离刻度线太远了。我确信有一种方法可以减少填充,但这只会使代码更难看,更不便携。
那么,如何才能只抑制构成绘图区域周围“框”的线条,同时保持刻度线和轴标签完好无损呢?如果这种方法也可用于抑制部分而非全部线条(例如,保留左侧和下部线条,但抑制顶部和右侧线条),则可加分。
【问题讨论】: