Как рассчитываются пределы оси решетки?
Скажи, я хочу создать обычный xyplot
без явного указания пределов осей, тогда как рассчитываются пределы осей?
Следующая строка кода создает простой график рассеяния. Тем не менее, пределы оси не находятся в точном диапазоне от 1 до 10, а слегка расширены влево и вправо, а также сверху и снизу (примерно на 0,5).
library(lattice)
xyplot(1:10 ~ 1:10, cex = 1.5, pch = 20, col = "black",
xlab = "x", ylab = "y")
Есть ли способ определить коэффициент, по которому оси были расширены на каждом сайте, например, используя trellis.par.get
? Я уже попробовал следующее после выполнения вышеупомянутого xyplot
команда:
library(grid)
downViewport(trellis.vpname(name = "figure"))
current.panel.limits()
$xlim
[1] 0 1
$ylim
[1] 0 1
К сожалению, пределы панели возвращаются как нормализованные родительские координаты, что делает невозможным получение "реальных" пределов. Любые предложения будут высоко оценены!
Обновить:
Используя base-R plot
диапазон данных (и, следовательно, пределы оси) по умолчанию расширен на 4% с каждой стороны, см. ?par
, Но этот фактор, похоже, не относится к объектам с "решеткой". Итак, что я ищу, это аналог аргумента 'xaxs' (и 'yaxs'), реализованного в par
,
1 ответ
Пределы оси для xyplot
рассчитываются в extend.limits
функция. Эта функция не экспортируется из пакета решетки, поэтому, чтобы увидеть ее, введите lattice:::extend.limits
, Относительно числового вектора, этой функции передается диапазон значений из соответствующих данных (c(1, 10)
в этом примере). Окончательные пределы рассчитываются по следующему уравнению:
lim + prop * d * c(-1, 1)
lim
являются пределы данных, в этом случаеc(1, 10)
prop
являетсяlattice.getOption("axis.padding")$numeric
который по умолчанию0.07
d
являетсяdiff(as.numeric(lim))
, в этом случае9
Результат в этом случае c(0.37, 10.63)
Если вам интересно, стек вызовов от xyplot
в extend.limits
является
xyplot
xyplot.formula
limits.and.aspect
limitsFromLimitList
extend.limits