Ответ 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)))
(как показано на растровом устройстве 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)
в результате чего
Итак, теперь (почти) все масштабировано. Интересно отметить, что этот подход не масштабировал длину линий в легенде и длину тика. Обратите внимание, что размер участка для каждого подзаголовка был одинаковым. Мы можем, однако, построить все это на гораздо меньших размерах:
Это разумно и будет выглядеть лучше на векторном устройстве (например, 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)))
который производит
Это построено на таком же устройстве размера png()
, что и на рисунке 2. Обратите внимание, как поля корректируются, чтобы график был лучше масштабирован. Таким образом, мы не только затронули все настройки, которые мы изменили ранее, мы также затронули другие биты графика (такие как интервалы и отметки), которые также занимают очередь из настроек fontsize
. Опять же, их построение на векторном устройстве приведет к лучшему результату.