Просто мелкий вопрос. Я пытаюсь сделать легенду для следующего сюжета.
# 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
. Однако, когда я повторно запускаю свой код с дополнительной опцией легенды pch = c(NA, 25)
, я получаю следующее:
Это не супер заметно, но если внимательно присмотреться к отступу на левом поле легенды, то он действительно уменьшился, и край границы теперь ближе к линии, чем хотелось бы. Есть ли способ обойти это?
Это любопытное поведение в 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 гораздо раздражает!