Как рассчитываются пределы оси решетки?

Скажи, я хочу создать обычный xyplot без явного указания пределов осей, тогда как рассчитываются пределы осей?

Следующая строка кода создает простой график рассеяния. Тем не менее, пределы оси не находятся в точном диапазоне от 1 до 10, а слегка расширены влево и вправо, а также сверху и снизу (примерно на 0,5).

library(lattice)
xyplot(1:10 ~ 1:10, cex = 1.5, pch = 20, col = "black", 
       xlab = "x", ylab = "y")

xyplot_axis_extension

Есть ли способ определить коэффициент, по которому оси были расширены на каждом сайте, например, используя 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 является

  1. xyplot
  2. xyplot.formula
  3. limits.and.aspect
  4. limitsFromLimitList
  5. extend.limits
Другие вопросы по тегам