Как написано в заголовке: как можно использовать легенду за пределами области печати при использовании базовой графики?
Я думал о том, чтобы возиться layout
и создать пустой график, содержащий только легенду, но мне было бы интересно использовать способ, использующий только базовый график, и, например, выделить par(mar = )
место справа от графика для легенды.
Вот пример:
plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
legend(1,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))
производит:
Но, как я уже сказал, я бы хотел, чтобы легенда находилась вне области построения (например, справа от графика / графика).
Ответы:
Возможно, вам нужно
par(xpd=TRUE)
сделать так, чтобы вещи рисовались за пределами области сюжета. Так что, если вы сделаете основной сюжет, уbty='L'
вас будет место справа для легенды. Обычно это обрезается до области графика, но сделайте это,par(xpd=TRUE)
и с небольшой корректировкой вы можете получить легенду настолько далеко, насколько это возможно:источник
par(xpd=NA)
он еще более силен (т. е. готовит участки к большему количеству регионов).par
звонок прямо перед легендой. В своем сюжете я использовалpar(new=T)
несколько других случаев и просто хотел добавитьxpd
параметр в тот же вызов, что вызывает проблемы.Никто не упомянул использование отрицательных
inset
значений дляlegend
. Вот пример, где легенда находится справа от графика и выровнена по верху (используя ключевое слово"topright"
).Первое значение
inset=c(-0.2,0)
может потребоваться настроить в зависимости от ширины легенды.источник
xpd
должно быть установлено, чтобыTRUE
отрицательная вставка работала. Но иногда нет. С командойargs.legend=list(x="bottom", horiz=TRUE, inset=-0.2)
внутриbarplot(...
она, кажется, не нужна,xpd=TRUE
но толькоlegend(x="bottom", horiz=TRUE, inset=-0.2)
с необходимостьюxpd=TRUE
. Есть идеи? Я просто запутался в передаче моих аргументов?Другое решение, кроме уже упомянутых (с помощью
layout
илиpar(xpd=TRUE)
), состоит в том, чтобы наложить свой график прозрачным графиком на все устройство, а затем добавить к нему легенду.Хитрость заключается в том, чтобы наложить (пустой) график на всю область построения и добавить к нему легенду. Мы можем использовать
par(fig=...)
опцию. Сначала мы инструктируем R создать новый график на всем графическом устройстве:Настройка
oma
иmar
необходима, так как мы хотим, чтобы интерьер сюжета охватывал все устройство.new=TRUE
необходим для предотвращения запуска R нового устройства. Затем мы можем добавить пустой график:И мы готовы добавить легенду:
добавит легенду в правом нижнем углу устройства. Аналогично, мы можем добавить легенду к верхнему или правому полю. Единственное, что нам нужно, это убедиться, что поле оригинального сюжета достаточно велико, чтобы вместить легенду.
Поместить все это в функцию;
И пример. Сначала создайте сюжет, убедившись, что у нас достаточно места внизу, чтобы добавить легенду:
Затем добавьте легенду
В результате чего:
источник
Извините, что воскресил старую ветку, но сегодня у меня была такая же проблема. Самый простой способ, который я нашел, заключается в следующем:
Найдено здесь: http://www.harding.edu/fmccown/R/
источник
Мне нравится делать это так:
Единственная необходимая настройка заключается в установке правого поля, которое должно быть достаточно широким для размещения легенды.
Однако это также может быть автоматизировано:
источник
Недавно я нашел очень простую и интересную функцию для печати легенды за пределами области сюжета, где вы хотите.
Сделайте внешнее поле с правой стороны графика.
Создать сюжет
Добавьте легенду и просто используйте функцию locator (1), как показано ниже. Затем вам нужно просто нажать, где вы хотите после загрузки следующего скрипта.
Попытайся
источник
Я могу предложить только пример уже упомянутого решения по макету.
источник
Добавление еще одной простой альтернативы, которая, на мой взгляд, довольно элегантна.
Ваш сюжет:
Условные обозначения:
Результат:
Здесь только вторая строка легенды была добавлена к вашему примеру. В очереди:
inset=c(0,1)
- перемещает легенду на долю области сюжета в направлениях (x, y). В этом случае легенда находится на"bottomright"
месте. Он перемещается на 0 областей построения в направлении x (таким образом, остается «справа») и на 1 область построения в направлении y (снизу вверх). И так получилось, что он появляется прямо над сюжетом.xpd=TRUE
- пусть легенда появится за пределами области черчения.horiz=TRUE
- поручает произвести горизонтальную легенду.bty="n"
- деталь стиля, чтобы избавиться от ограничивающей рамки легенды.То же самое относится и при добавлении легенды на сторону:
Здесь мы просто скорректировали положение легенды и добавили дополнительное пространство для полей справа от графика. Результат:
источник
Это можно сделать с помощью API Plotly R , с помощью кода или из графического интерфейса, перетащив легенду туда, где вы хотите.
Вот пример. График и код также здесь .
Легенду можно расположить за пределами графика, присвоив одному из значений x и y значение 100 или -100.
Вот другие варианты:
list("x" = 100, "y" = 0)
для наружного правого днаlist("x" = 100, "y"= 1)
Снаружи справа сверхуlist("x" = 100, "y" = .5)
Снаружи правый среднийlist("x" = 0, "y" = -100)
Под левымlist("x" = 0.5, "y" = -100)
В центреlist("x" = 1, "y" = -100)
Под правымТогда ответ.
response = p$plotly(x,y,x2,y2, kwargs=list(layout=layoutstyle));
Plotly возвращает URL с вашим графиком, когда вы делаете звонок. Вы можете получить к нему более быстрый доступ, позвонив,
browseURL(response$url)
чтобы он открыл ваш график в вашем браузере для вас.Это дает нам этот график. Вы также можете переместить легенду из GUI, и тогда график будет соответственно масштабирован. Полное раскрытие: я в команде Plotly.
источник
Попробуйте то,
layout()
что я использовал для этого в прошлом, просто создав пустой график ниже, правильно масштабированный примерно на 1/4 или около того, и поместив в него части легенды вручную.Здесь есть несколько старых вопросов, с
legend()
которых стоит начать.источник