Я пытаюсь построить линейный график с точками с легендой на основе цвета точек. Диаграмма отображается правильно, но легенда не отображается.
Данные, лежащие в основе диаграммы, представляют собой формат фрейма данных с 4 столбцами: месяц, переменная (например, конкретные пользователи), значение (числовое значение, представляющее оценку) и цвет (красное/желтое/зеленое значение на основе числовой оценки).
Код диаграммы выглядит следующим образом:
ggplot(data = meltdf2, aes(x = Month, y = variable, group = variable)) +
geom_line(linetype = "dashed", colour = "grey") +
geom_point(colour = meltdf2$colour, size = 3) +
scale_x_date(date_breaks = "1 month" , date_labels = "%b-%y") +
theme(axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank(),
axis.line.x = element_line(colour = "darkgrey"),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_blank(), panel.grid.minor = element_blank())
legend("topleft", legend = c("High", "Mid", "Low"), pch = 1, col= c("red2","gold","limegreen"))
Независимо от того, запускаю ли я код сюжета и легенды отдельно или вместе, и включаю ли я их в одни и те же скобки или нет, я получаю сообщение об ошибке:
Error in strwidth(legend, units = "user", cex = cex, font = text.font) : plot.new has not been called yet
Любые советы о том, как отобразить легенду, будут высоко оценены.
@ r2evans спасибо - я разместил рабочий код на основе вашего комментария ниже.





Ответ основан на комментарии @r2evans выше:
Проблема действительно заключалась в попытке использовать базовые графические команды с графикой ggplot.
Чтобы решить эту проблему и отобразить необходимую легенду, я создал вектор палитры (pal) с именами, основанными на значениях переменной melt2df$colour в исходном фрейме данных. Этот вектор был включен в код графика как часть функцииscale_colour_manual. Функция aes использовалась внутри функции geom_point, чтобы обернуть различные эстетические требования к сериалу.
Завершенный код показан ниже:
pal <- c("High" = "red2","Mid" = "gold","Low" = "limegreen","NA"= "NA")
#create plot with line and points.
#colour of points based on colour column of meltdf2
ggplot(data = meltdf2, aes(x = Month, y = variable, group = variable)) +
geom_line(linetype = "dashed", colour = "grey") +
geom_point(aes(colour = meltdf2$colour, size = 3)) +
scale_colour_manual(values = pal, limits = names(pal)) +
scale_x_date(date_breaks = "1 month" , date_labels = "%b-%y") +
theme(axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank(),
axis.line.x = element_line(colour = "darkgrey"),
panel.background = element_rect(fill = "white"),
panel.grid.major = element_blank(), panel.grid.minor = element_blank())
legendиstrwidthбазовая графика, но вы начали сggplotграфики. Эти двое несовместимы. Я предлагаю вам посмотреть ggplot2.tidyverse.org/ссылка, чтобы узнать, как настроить легенду для этого графика. Если вам нужна дополнительная помощь, вам нужно улучшить вопрос, включив данные репрезентативной выборки (возможно,dput(head(meltdf2))) и то, как вы ожидаете, как будет выглядеть легенда.