Используйте постоянную вертикальную регулировку для текста () и легенды () независимо от размеров графика - PullRequest
0 голосов
/ 24 марта 2019

Чтобы нарисовать метки оси X для барплотов в R, я использую text() следующим образом:

text(mean(bp), par("usr")[3] - 0.05*yDiff, xpd=NA, labels=journey, cex=0.9, font=2)

Чтобы нарисовать легенду, я использую что-то вроде этого:

legend("bottom", legend=abbrevLabels, fill=c(colors), xpd=NA, horiz=TRUE, bty="n", 
   cex=1.0, inset=c(0, -0.3), xjust=0, adj=0.035, 
   text.width=rep(meanLabelLen/7.5, length(legendLabels)))

Оба вертикальных смещения здесь - 0.05*yDiff и смещение вставки -0.3 для легенды - находятся в пространстве оси Y.По разным причинам это проблема для меня.Вместо этого я предпочитаю смещения в единицах пикселей.То есть, что я действительно хочу сказать: «визуализировать метки на 10 пикселей ниже нижней части графика».

Как это можно сделать?

1 Ответ

0 голосов
/ 25 марта 2019

При постоянном вертикальном смещении горизонтальных меток оси X, расположенных под гистограммами (в нижней части большей сетки таких графиков), получается, что использование title с атрибутом line обеспечивает согласованное поведение / размещениене зависит от размера устройства.Вот что я сейчас делаю:

title(xlab=journey, line=0, cex=0.8, font.lab=2, xpd=NA)

, где line является целым числом, а 0 является ближайшим к графику, а более высокое целое число находится дальше (в отрицательном направлении Y).

По легенде, я не смог придумать постоянное вертикальное смещение, которое бы велось независимо от размеров сетки или размера устройства.Несколько моментов здесь:

  • yjust параметр до legend не работал вообще.Я искал в Интернете примеры, но независимо от того, какое значение я использовал, yjust был запрещен.
  • y параметр работает , но, к сожалению, не в сочетании с описательным атрибутом для x;то есть, если x установлено на bottom, вы не можете одновременно установить y.Мне показалось, что это поведение сбивает с толку, так как я обычно ожидаю, что эти координаты не зависят друг от друга.

Чтобы обойти эти ограничения, я сделал следующее:

yInset <- 0.4 * (1.075 - par("fin")[2] / dev.size("in")[2])
legend(x='bottom', yjust=-0.75, inset=c(0, -yInset), legend=abbrevLabels, fill=c(colors), xpd=NA, horiz=TRUE, bty="n", cex=1.0, adj=0.035, text.width=rep(meanLabelLen/7.5, length(legendLabels)))

Эта логика эффективно устанавливает скользящее смещение по Y пропорционально размерам сетки и размеру устройства.Эмпирически определенные коэффициенты масштабирования / смещения, равные 1.075 и 0.4, действительно брутто, но на данный момент достаточно.

В будущем было бы полезно, если бы некоторые ограничения для legend, упомянутые выше, были устранены (или, возможно, лучше объяснить, в случае, если я неправильно понял документы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...