Отступ вокруг легенды при использовании Pch в Base R

Просто мелкий вопрос. Я пытаюсь сделать легенду для следующего сюжета.

# fitting the linear model
iris_lm = lm(Petal.Length ~ Sepal.Length, data = iris)
summary(iris_lm)

# calculating the confidence interval for the fitted line
preds = predict(iris_lm, newdata = data.frame(Sepal.Length = seq(4,8,0.1)),
                  interval = "confidence")

# making the initial plot
par(family = "serif")
plot(Petal.Length ~ Sepal.Length, data = iris, col = "darkgrey",
     family = "serif", las = 1, xlab = "Sepal Length", ylab = "Pedal Length")

# shading in the confidence interval
polygon(
  c(seq(8,4,-0.1), seq(4,8,0.1)), # all of the necessary x values
  c(rev(preds[,3]), preds[,2]), # all of the necessary y values
  col = rgb(0.2745098, 0.5098039, 0.7058824, 0.4), # the color of the interval
  border = NA # turning off the border
)

# adding the regression line
abline(iris_lm, col = "SteelBlue")

# adding a legend
legend("bottomright", legend = c("Fitted Values", "Confidence Interval"),
       lty = c(1,0))

Вот результат:

Отступ вокруг легенды при использовании Pch в Base R

Моя цель — поставить прямоугольник в легенде рядом с вкладкой «Доверительный интервал» и покрасить его в тот же оттенок, что и на картинке. Естественно, я подумал использовать параметр pch. Однако, когда я повторно запускаю свой код с дополнительной опцией легенды pch = c(NA, 25), я получаю следующее:

Отступ вокруг легенды при использовании Pch в Base R

Это не супер заметно, но если внимательно присмотреться к отступу на левом поле легенды, то он действительно уменьшился, и край границы теперь ближе к линии, чем хотелось бы. Есть ли способ обойти это?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
162
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это любопытное поведение в legend(). Я уверен, что кто-то предложит ggplot2 альтернативу. Однако legend() предлагает решение. Это решение вызывает функцию без построения графика для захвата размеров прямоугольника желанный. Затем легенда отображается с элементами, которые вам действительно нужны, но без рамки (bty = "n"). Желаемый прямоугольник добавляется явно. Я предполагаю, что вы имеете в виду pch = 22, чтобы получить символ заполненного прямоугольника. Я добавил pt.cex = 2, чтобы сделать его немного больше.

# Capture the confidence interval color, reusable variables
  myCol <- rgb(0.2745098, 0.5098039, 0.7058824, 0.4)
  legText <- c("Fitted Values", "Confidence Interval")

# Picking it up from 'adding a legend'
  ans <-  legend("bottomright", lty = c(1,0), legend = legText, plot = F)
  r <- ans$rect
  legend("bottomright", lty = c(1,0), legend = legText, pch = c(NA,22),
    pt.bg = myCol, col = c(1, 0), pt.cex = 2, bty = "n")

# Draw the desired box
  rect(r$left, r$top - r$h, r$left + r$w, r$top)

Кстати, я не думаю, что это будет работать без дополнительной настройки, если вы разместите легенду слева.

Хороший ответ! Да, это позор, что это происходит, лично я предпочитаю визуализацию базы R, а не ggplot, но работать с базой R гораздо раздражает!

akenny430 23.05.2019 03:20

Другие вопросы по теме