Я создал график, используя ggplot2, который работал изначально.Ничего не меняя, он перестал работать для меня, выдав ошибку: «Эстетика должна быть либо длины 1, либо такой же, как data (9): label».Тем не менее, мои коллеги запускают мой код в своих системах, и он работает отлично.Что может вызвать это?У всех нас установлена почти одинаковая версия или R, RStudio, ggplot2 и tidyverse.
Я попытался вызвать библиотеку ggplot2 до и после вызова библиотеки tidyverse, чтобы выяснить, возможно, это было несовпадение версий,Я удалил все свои пакеты и переустановил их.Я удалил R и переустановил R. Он никогда не работает для меня и всегда работает для них.
У меня ggplot2 версии 3.2.0 и у них ggplot2 версии 3.1.1.Сайт https://github.com/tidyverse/ggplot2/releases говорит, что версия 3.2.0 «исправила» проблему, которая, возможно, позволила сотрудникам с 3.1.1 запускать код, даже если он не должен был выполняться;это подразумевает, что в моем коде есть что-то неправильное, что каким-то образом предыдущие версии 3.1.1 могли работать случайно.Вот строка в версии 3.2.0, которая выглядела релевантной:
"В некоторых случаях ggplot2 теперь выдает предупреждение или ошибка для кода, который ранее производил вывод графика .Во всех этих случаях предыдущий вывод графика был случайным, и код построения использовал API ggplot2 таким образом, что это привело бы к неопределенному поведению. Примеры включают ... аннотации для нескольких аспектов (# 3305) ... ")
Так что это либо проблема с настройками моего программного обеспечения или пакета, либо мой код неверен.Есть мысли?
Это все библиотеки, которые я называю:
library(tidyverse)
library(lubridate)
library(readxl)
library(reshape2)
library(scales)
library(plotly)
library(extrafont)
Вот что печатает консоль, когда я запускаю библиотеку (tidyverse):
library(tidyverse)
Registered S3 methods overwritten by 'ggplot2':
method from
[.quosures rlang
c.quosures rlang
print.quosures rlang
-- Attaching packages --------------------------------------- tidyverse 1.2.1 --
v ggplot2 3.2.0 v purrr 0.3.2
v tibble 2.1.1 v dplyr 0.8.0.1
v tidyr 0.8.3 v stringr 1.4.0
v readr 1.3.1 v forcats 0.4.0
-- Conflicts ------------------------------------------
tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
Здесьвся таблица, которую я превращаю в график:
Component_ProgramItem task ProjectedEndDate_6_30_18 date.type task.date
1 Citywide Programs Original 2019-12-31 end 2012-08-30
2 Neighborhood Parks Original 2016-01-27 end 2013-03-31
3 Waterfront Parks Original 2019-12-31 end 2015-02-28
4 Neighborhood Parks Updated 2016-01-27 end 2016-01-27
5 Citywide Programs Updated 2019-12-31 end 2020-03-31
6 Waterfront Parks Updated 2019-12-31 end 2020-04-30
7 Citywide Programs Original 2019-12-31 start 2008-08-28
8 Neighborhood Parks Original 2016-01-27 start 2008-08-28
9 Waterfront Parks Original 2019-12-31 start 2008-08-28
10 Citywide Programs Updated 2019-12-31 start 2012-08-30
11 Neighborhood Parks Updated 2016-01-27 start 2013-03-31
12 Waterfront Parks Updated 2019-12-31 start 2015-02-28
Вот код, который я использую, чтобы превратить его в график:
#6 Create ggplot schedule
#order of "label=c("label name...", Label name 2...", ) is alphabetical
ggplot(csnp2008.sched.long, aes(x=task, y=task.date, colour=task)) +
geom_line(size=70, show.legend = FALSE) +
scale_color_manual(values = c("#fadd9d", "#ffc000")) +
scale_fill_manual(values = c("#fadd9d", "#ffc000")) +
labs(x=NULL, y=NULL) +
scale_y_date(breaks = "1 year", date_minor_breaks = "1 year", date_labels = "%b-%Y") +
#guides(fill=guide_legend(title=NULL, reverse=TRUE)) +
geom_hline(data = csnp2008.sched.long, aes(yintercept=ProjectedEndDate_6_30_18),
color = "#7f7f7f", size = 1, linetype = "dashed") +
annotate("text", x="task", y=as.Date("2008-10-30"),
label=c("Citywide Programs",
"Neighborhood Parks",
"Waterfront Parks"),
size = 3.75, hjust = "left", family = "Segoe UI Semilight") +
#facet_grid(Component~., switch = "y", labeller = labeller(Component = label_wrap_gen(10))) +
facet_grid(Component_ProgramItem~., switch = "y", scales = "free", space = "free") +
theme_gantt() + theme(axis.text.x=element_text(angle=45, hjust=1, size = 9,
family = "Segoe UI Semilight"),
axis.line.x = element_line(color= "#e7e5e6"),
axis.ticks.x = element_line (color = "#7f7f7f"),
axis.title=element_blank(),
axis.text.y = element_blank(),
strip.text = element_blank())+
coord_flip()
Этот раздел не будет запускатьсякода для меня, выбрасывая ошибку после функции аннотации: «Эстетика должна быть либо длина 1 или совпадает с data (9): label».Тем не менее, он отлично работает для всех остальных и возвращает правильный график для них без сообщений об ошибках.
Это проблема программного обеспечения?Или проблема с кодом?
PS Я не буду прикреплять изображение окончательного графика, потому что это не очень важно, я не думаю.Но если вам это нужно, я могу.
PPS вот код для воссоздания:
df2 <- structure(
list(
Component_ProgramItem = c("Citywide Programs","Citywide Programs","Citywide Programs","Citywide Programs", "Neighborhood Parks","Neighborhood Parks","Neighborhood Parks","Neighborhood Parks","Waterfront Parks","Waterfront Parks","Waterfront Parks","Waterfront Parks"),
task = c("Original Schedule","Updated Schedule","Original Schedule","Updated Schedule","Original Schedule","Updated Schedule","Original Schedule","Updated Schedule","Original Schedule","Updated Schedule","Original Schedule","Updated Schedule"),
ProjectedEndDate_6_30_18 = c("2019-12-31","2019-12-31","2019-12-31","2019-12-31","2016-01-27","2016-01-27","2016-01-27","2016-01-27","2019-12-31","2019-12-31","2019-12-31","2019-12-31"),
data.type = c("end", "end", "start", "start","end", "end", "start", "start","end", "end", "start", "start"),
task.date = c("2012-08-30","2020-03-31","2008-08-28","2012-08-30","2013-03-31","2016-01-27","2008-08-28","2013-03-31","2015-02-28","2020-04-30","2008-08-28","2015-02-28")),
.Names = c("Component_ProgramItem", "task", "ProjectedEndDate_6_30_18", "data.type", "task.date"),
row.names = c(NA, 12L),
class = "data.frame")