Управление тиками осей и осевыми линиями отдельно на решетчатом xyplot
Как я могу удалить коробку вокругxyplot
, сохраняя отметки шкалы оси? В духе минималистической графической эстетики данных Эдварда Туфте эти линии осей являются «чернилами без данных» и могут (должны?) Быть «стерты».
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)
}
)
Это близко к желаемому результату, но требуется немало хлопот, чтобы сделать отметки приемлемой длины и сместить «хорошее» расстояние от точек данных. Эти значения не будут переводиться из одного графика в другой. Кроме того, обратите внимание, что метки осей теперь расположены слишком далеко от отметок. Я уверен, что есть способ уменьшить это заполнение, но это только сделает код еще более уродливым и менее переносимым.
Итак, как можно подавить только те линии, которые составляют «прямоугольник» вокруг области графика, оставив при этом отметки и метки осей нетронутыми? Бонусные баллы, если этот подход также можно использовать для подавления некоторых, но не всех линий (например, оставить левую и нижнюю линии, но подавить верхнюю и правую линии).