Подтвердить что ты не робот

Как приятно масштабировать фигуры решетки?

При подготовке рисунков для печати мне часто приходится делать их намного меньше, чем они появляются на экране. Это не редкость иметь цифры до нескольких см в поперечнике. Со стандартным графическим пакетом par(cex=...) можно использовать для масштабирования всего графика, чтобы он соответствовал такой небольшой области и по-прежнему выглядел пропорционально. Есть ли эквивалент в пакете решетки?

В принципе, как сделать рисунок ниже в размере правой панели, но сохраняя пропорции левой панели?

enter image description hereenter image description here

Эта проблема возникает у меня время от времени, и обычно мне приходится экспериментировать с безумными с trellis.par.get и trellis.par.set, прежде чем сдавать и перерисовывать всю фигуру, используя стандартную графику (что очень утомительно). Когда я обнаружил trellis.par.set(simpleTheme(cex=...)), я думал, что попал в золото, но он ничего не делает.

Разъяснения

Я хочу перемасштабировать все в сюжете, включая шрифты, поля и размеры тика. Земельный участок. Я знаю, что могу просто настроить pdf(height=..., width=...), чтобы получить пропорции, которые мне нравятся, а затем перемасштабировать их в наборе, например. InDesign или текстовый процессор, но я чувствую, что получаю лучший контроль, если каждый PDF имеет намеченные размеры, встроенные в файл.

4b9b3361

Ответ 1

Введение

Существует несколько способов масштабирования размеров элементов решетки. Один из вариантов - изменить все параметры, которые принимают атрибут cex, а другой - изменить базовый fontsize, на который нарисовано все. Решение, которое вы хотите, является последним, как вы увидите через минуту, но также поучительно видеть, как вы можете влиять на отдельные компоненты графика с помощью аргумента par.settings, поскольку вы можете настроить относительное масштабирование, применяемое к индивидуальному компонентов при настройке fontsize.

ТЛ: дг

Используя примерный график из @Andrie Answer

require(lattice)
plt <- xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
              type = "a",
              auto.key = list(space = "right", points = FALSE, lines = TRUE))

Задайте параметр fontsize, список с компонентами text и points, которые определяют базовые размеры для этих двух ключевых элементов графика, из которых генерируется вся другая мебель.

update(plt, par.settings = list(fontsize = list(text = 8, points = 4)))

enter image description here

(как показано на растровом устройстве PNP размером 150 пикселей на 200 пикселей).

Установка индивидуальных параметров cex для определенных элементов мебели для заготовки

Одна из замечаний заключается в том, что внешний вид графика решетки контролируется целым потоком параметров, возвращаемым trellis.par.get()

> thm <- trellis.par.get()
> str(thm, max = 1)
List of 35
 $ grid.pars        : list()
 $ fontsize         :List of 2
 $ background       :List of 2
 $ panel.background :List of 1
 $ clip             :List of 2
 $ add.line         :List of 4
 $ add.text         :List of 5
 $ plot.polygon     :List of 5
 $ box.dot          :List of 5
 $ box.rectangle    :List of 5
 $ box.umbrella     :List of 4
 $ dot.line         :List of 4
 $ dot.symbol       :List of 5
 $ plot.line        :List of 4
 $ plot.symbol      :List of 6
 $ reference.line   :List of 4
 $ strip.background :List of 2
 $ strip.shingle    :List of 2
 $ strip.border     :List of 4
 $ superpose.line   :List of 4
 $ superpose.symbol :List of 6
 $ superpose.polygon:List of 5
 $ regions          :List of 2
 $ shade.colors     :List of 2
 $ axis.line        :List of 4
 $ axis.text        :List of 5
 $ axis.components  :List of 4
 $ layout.heights   :List of 19
 $ layout.widths    :List of 15
 $ box.3d           :List of 4
 $ par.xlab.text    :List of 5
 $ par.ylab.text    :List of 5
 $ par.zlab.text    :List of 5
 $ par.main.text    :List of 5
 $ par.sub.text     :List of 5

Многие из них влияют на размер выделенных объектов и текст, используемый в аннотациях. Вам нужно изменить все соответствующие настройки и передать только те, что указаны в списке par.settings(). Ниже приведен пример масштабирования примера примера @Andrie:

CEX <- 0.5

pset <- list(superpose.symbol = list(cex = CEX),
             plot.symbol      = list(cex = CEX),
             par.sub.text     = list(cex = CEX),
             par.main.text    = list(cex = CEX),
             par.zlab.text    = list(cex = CEX),
             par.ylab.text    = list(cex = CEX),
             par.xlab.text    = list(cex = CEX),
             dot.symbol       = list(cex = CEX),
             box.dot          = list(cex = CEX),
             add.text         = list(cex = CEX),
             axis.text        = list(cex = CEX))
plt2 <- update(plt, par.settings = pset)

Используя пакет gridExtra для размещения двух графиков решетки на одном устройстве, мы можем увидеть эффект всего этого:

require("gridExtra")  ## loads package:grid too
grid.arrange(plt, plt2, ncol = 2)

в результате чего

enter image description here

Итак, теперь (почти) все масштабировано. Интересно отметить, что этот подход не масштабировал длину линий в легенде и длину тика. Обратите внимание, что размер участка для каждого подзаголовка был одинаковым. Мы можем, однако, построить все это на гораздо меньших размерах:

enter image description here

Это разумно и будет выглядеть лучше на векторном устройстве (например, pdf()), чем растровое png(), которое мне пришлось использовать для иллюстрации здесь. Второй график находится на устройстве размером 150 пикселей на 200 пикселей.

Установка базы fontsize для управления общим масштабированием

Существует более простой способ: установить базовый шрифт для текста и точек через параметр fontsize. По умолчанию:

> trellis.par.get("fontsize")
$text
[1] 12

$points
[1] 8

Они влияют на все на графике, поэтому мы можем уменьшить их, чтобы добиться аналогичного эффекта при настройке всех этих параметров.

update(plt, par.settings = list(fontsize = list(text = 8, points = 4)))

который производит

enter image description here

Это построено на таком же устройстве размера png(), что и на рисунке 2. Обратите внимание, как поля корректируются, чтобы график был лучше масштабирован. Таким образом, мы не только затронули все настройки, которые мы изменили ранее, мы также затронули другие биты графика (такие как интервалы и отметки), которые также занимают очередь из настроек fontsize. Опять же, их построение на векторном устройстве приведет к лучшему результату.

Ответ 2

Вам нужно передать cex=... в легенду/ключ, а не весь сюжет:

Это значение по умолчанию:

xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
       type = "a",
       auto.key =
         list(space = "right", points = FALSE, lines = TRUE))

enter image description here

Сравните результаты, когда вы используете cex=0.25 в ключе:

xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
       type = "a",
       auto.key =
         list(space = "right", points = FALSE, lines = TRUE, cex=0.25))

enter image description here