Я пытаюсь найти способ рассчитать высоту легенды для графика до установки полей графика. Я намерен разместить легенду под графиком под метками оси X и заголовком.
Поскольку это часть функции, которая отображает ряд вещей, легенда может увеличиваться и уменьшаться в размерах, чтобы обслуживать 2 элемента, до 15 или более, поэтому мне нужно выяснить, как я могу сделать это динамически, а не жестко кодировать . Итак, в конце концов мне нужно динамически установить поля и некоторые другие кусочки.
Ключевая проблема состоит в том, чтобы определить высоту легенды, которую нужно ввести в par(mar)
, до рисования графика, но после анализа базовых кодов для легенды, однако, кажется невозможным получить точную оценку значения высоты, если график не нарисован на самом деле. (курица и яйцо кто-нибудь?)
Вот что я уже пробовал:
получить высоту, используя вывод
legend$rect$h
из функции базовой легенды (которая, кажется, дает неверное значение высоты, если только график не нарисован)подсчитайте количество строк в легенде (легко) и умножьте это на высоту строки (чтобы сделать это, кажется, вам нужно перевести в дюймы (код базовой легенды использует yinch, и я также пробовал
grconvertY
, но ни этих произведений, если не был нарисован сюжет).
Еще одна проблема заключается в том, чтобы определить правильное значение y для размещения легенды — я полагаю, что как только я решу первую задачу, вторая будет легкой.
ИЗМЕНИТЬ:
После дня мучений над тем, как это (не) работает. У меня есть пара идей и пара вопросов. Для ясности, это то, что по существу делает моя функция:
шаг 1) установить поля
шаг 2) создайте гистограмму на левой оси
шаг 3) переустановите координаты usr - это необходимо для обеспечения выравнивания правой оси, в противном случае он будет отображаться по шкале оси x. Нехорошо, когда они заметно отличаются.
шаг 4) создайте правую ось
шаг 5) создайте серию линейных диаграмм на правой оси
шаг 6) сделайте некоторую маркировку двух осей и оси x
шаг 7) добавить легенду
Вот вопросы
Q1) В каких единицах сообщается о вещах? Меня интересуют границы полей и координаты (пользовательские координаты), дюймы говорят сами за себя. - Я могу сделать некоторые преобразования, используя grconvertY(), но я не уверен, на что я смотрю и во что я должен преобразовываться - документация не так хороша.
Q2) Мне нужно установить поле на шаге 1, чтобы в нижней части диаграммы было достаточно места для легенды. Я думаю, что правильно понял, однако мне нужно установить легенду после того, как правая ось и линейные диаграммы установлены, что означает, что пользовательские координаты (и значение пикселя в дюйме) изменились. Из-за Q1 выше I' Я не знаю, как перевести одну систему в другую. Буду признателен за любые идеи на этот счет.
plot=FALSE
- person user20650   schedule 13.05.2014