У меня есть график geom_point, к которому я добавил как регрессионную линию geom_smooth (которую я хочу отобразить в виде пунктирной серой линии), так и geom_abline (которую я хочу отобразить в виде сплошной черной линии). Я могу сделать это, но проблема возникает, когда я пытаюсь включить легенду, обозначающую две строки.
Я потратил более четырех часов на рассмотрение каждого вопроса о стековом потоке, который выглядит неопределенно релевантным, а также раздела R cookbook для scale_XXX_manual и легенд, и мне кажется, что я понимаю, что требуется, а именно, задаю цвет и тип линии с помощью фиктивных переменных в aes для соответствующего geom, а затем определяем эти фиктивные переменные в операторах scale_XXXX_manual с использованием опции values=
, как я сделал в следующем коде
df <- data.frame(xvar=c(1, 1.7, 2, 2.47, 3.47),
yvar=c(-0.543, 0.326, 0.147, 0.554, 1.180),
wtvar=c(167, 43, 965, 841, 84))
ggplot(df, aes(x=xvar, y=yvar))+
geom_point()+
geom_smooth(method="lm",
mapping = aes(weight = wtvar, colour="A", linetype="B"))+
geom_abline(slope=1, intercept = (-1.3), aes(colour="C", linetype="D"), size=1)+
ylim(-1,2.5)+
theme_classic()+
scale_colour_manual(name="Legend",
labels=c("regression", "benchmark"),
values=c(A="grey85", C="black"))+
scale_linetype_manual(name="Legend",
labels=c("regression", "benchmark"),
values=c(B="dashed", D="solid"))
Я получаю следующую ошибку:
Ошибка: ggplot2 не знает, как обращаться с данными класса Unval
Объяснение того, почему то, что я сделал, не работает, а также рекомендации по правильному решению, будут очень благодарны.
Обновление: объединение двух операторов aes в geom_smooth, как это было предложено (спасибо Z. Lin - я думал, что опция отображения была связана только с регрессией, но теперь я понимаю, что это все эстетика) останавливает сообщение об ошибке и получает много ближе к желаемому результату. Сам сюжет выглядит так, как и должен, но недостающий фрагмент головоломки - это включение контрольной линии в легенду. Я получаю легенду только с пунктирной серой линией, идентифицированной как линия регрессии.