сюжет легенды без рамки и на белом фоне

У меня есть легенда в сюжете с проходящей через нее строкой (из аблайн-оператора). Как я могу добиться, чтобы аблайн становился невидимым в непосредственной близости от легенды? Это должно быть достигнуто, если установить фон легенды белым, без границ, но как я могу этого добиться? Предположим, график должен выглядеть так:

windows.options(width=30, height=12)
plot(1:10)
abline(v=seq(1,10,1), col='grey', lty='dotted')
legend(4.8, 3, "This legend text should not be disturbed by the dotted grey lines")

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

windows.options(width=30, height=12)
plot(1:10)
abline(v=seq(1,10,1), col='grey', lty='dotted')
legend(1, 5, "This legend text should not be disturbed by the dotted grey lines, but the plotted dots should still be visible")

И наконец: есть ли способ ввести перенос строки в условных обозначениях?


person biotom    schedule 11.04.2012    source источник
comment
Почему этот вопрос не отмечен как ответ?   -  person and-bri    schedule 27.10.2016


Ответы (2)


Используйте опцию bty = "n" в legend, чтобы удалить рамку вокруг легенды. Например:

legend(1, 5,
       "This legend text should not be disturbed by the dotted grey lines,\nbut the plotted dots should still be visible",
       bty = "n")
person mayank    schedule 07.04.2013
comment
Это правильный ответ. Было бы неплохо, если бы документация R действительно буквально объясняла, что bty = 'n' не приведет к отрисовке блока легенды. Вместо этого он просто говорит, что «n» - это один из вариантов, без объяснения эффекта этого варианта. Интересно, позволят ли разработчики R кому-то вроде меня улучшить стандартную документацию, например эту. - person Geoffrey Anderson; 08.05.2014
comment
@GeoffreyAnderson, что серьезная проблема с R: документы написаны очень плохо. - person Jim; 06.08.2018
comment
@olala - bty, насколько я понимаю, означает тип коробки, поэтому для типа коробки n нет. - person Badger; 24.01.2019

Как описано в ?legend, вы делаете это так:

plot(1:10,type = "n")
abline(v=seq(1,10,1), col='grey', lty='dotted')
legend(1, 5, "This legend text should not be disturbed by the dotted grey lines,\nbut the plotted dots should still be visible",box.lwd = 0,box.col = "white",bg = "white")
points(1:10,1:10)

введите описание изображения здесь

Разрывы строк достигаются с помощью символа новой строки \n. Чтобы точки оставались видимыми, достаточно просто изменить порядок построения. Помните, что рисование в R похоже на рисование на листе бумаги: каждая вещь, которую вы рисуете, будет помещена поверх всего, что есть в данный момент.

Обратите внимание, что текст легенды обрезан, потому что я уменьшил размеры графика (windows.options не существует на всех платформах R).

person joran    schedule 11.04.2012
comment
box.lwd = 0 будет работать нормально. bty = 'n', вероятно, лучше, потому что это означает, что тип поля легенды вообще НЕТ. Оба хороших ответа! - person Geoffrey Anderson; 08.05.2014
comment
Это лучший ответ, чем bty = 'n', потому что он сохраняет белый цвет bg, который был задан в исходном вопросе. Для второй точки, где легенда покрывает линию, но не точки, единственное решение, которое я вижу, - это добавить команду points () после строки легенды. - person slammaster; 20.10.2014