Как исправить: «Ошибка в strwidth» при построении легенды - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь построить линейный график с точками с легендой, основанной на цвете точек.Диаграмма построена правильно, но легенда не отображается.

Данные за диаграммой представляют собой формат кадра данных с 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

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

1 Ответ

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

Ответ основан на комментарии @ 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())
...