Обивка вокруг легенды при использовании Pch в Base R - PullRequest
1 голос
/ 22 мая 2019

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

# 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))

Вот вывод на данный момент:

enter image description here

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

enter image description here

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

1 Ответ

1 голос
/ 22 мая 2019

Это странное поведение в 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)

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

...