Легенда изменилась на графике facet_grid после некоторых обновлений данных - PullRequest
0 голосов
/ 05 марта 2019

У меня есть барплот ggplot с facet_grid, который до сегодняшнего дня работал нормально.Я понятия не имею, почему легенда не то же самое, что я имел раньше.Теперь вместо 4 Статусов у меня их много, как показано на рисунке.

Код для создания кадра данных:

df <- structure(list(Business = c("B", "B", "B", "K", "K", "K", "K", 
"N", "N", "N", "N", "N", "O", "O", "P", "P", "P", "P", "P", "P", 
"W", "W", "W"), Status = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 
4L, 3L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, 2L, 
3L), .Label = c("Cancelled", "Closed", "In SAP", "Open"), class = "factor"), 
    `Status Count` = c(5L, 22L, 174L, 40L, 65L, 551L, 4L, 36L, 
    2L, 4L, 43L, 5L, 10L, 4L, 22L, 132L, 394L, 6L, 2L, 5L, 6L, 
    66L, 106L), Percentage = c(2.49, 11, 87, 6.06, 10, 83, 1, 
    100, 3.7, 7, 80, 9, 71, 29, 3.97, 24, 71, 1, 29, 71, 3.37, 
    37, 60), tot = c(75L, 301L, 1313L, 75L, 301L, 1313L, 15L, 
    1313L, 75L, 301L, 1313L, 15L, 301L, 1313L, 75L, 301L, 1313L, 
    15L, 301L, 1313L, 75L, 301L, 1313L), business_per = c(4, 
    18, 77, 4, 18, 77, 0.88, 1, 77, 4, 18, 0.88, 77, 1, 18, 77, 
    4, 0.88, 18, 77, 1, 18, 77)), .Names = c("Business", "Status", 
"Status Count", "Percentage", "tot", "business_per"), row.names = c(NA, 
-23L), class = c("tbl_df", "tbl", "data.frame"))


#create the legend
MStatus=paste(df$Status,"(",df$tot,")",df$business_per,"%")

Сюжет:

ggplot(df, aes(fill=`MStatus`, y=`Status Count`, x=Status, color=factor(Status))) + 
  geom_bar(position=position_dodge(width = 2), stat="identity") +
  facet_grid(~Business, labeller = labeller(Business=label_wrap_gen(12))) +
  geom_text(size=4, aes(label=paste(Percentage,"%"), vjust = -0.5)) +
  scale_color_discrete(guide=FALSE) + # removes the legend for factor(Status)
  scale_x_discrete(breaks = NULL) + #turn off vertical grid lines and removed the axis x label
  theme(axis.text.x = element_text(angle=90, hjust=1))

Это сюжет и легенда, которую я получаю:

enter image description here

Это легенда, которую я ожидаю(цифры не верны, важен только стиль)

enter image description here

Редактировать 1:

Я создаюследующий кадр данных, следуя тем же шагам, и легенда, если все в порядке.Единственное отличие, которое я вижу здесь, это только количество записей, которое не должно вызывать проблем.Это ошибка в функции?

df <- structure(list(Business = c("B", "B", "B", "K", "K", "K", "K", 
"N", "N", "N", "N", "N", "O", "O", "P", "P", "P", "P", "P", "P", 
"W", "W", "W"), Status = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 
4L, 3L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, 2L, 3L, 4L, 2L, 3L, 1L, 2L, 
3L), .Label = c("Cancelled", "Closed", "In SAP", "Open"), class = "factor"), 
    `Status Count` = c(5L, 22L, 174L, 40L, 65L, 551L, 4L, 36L, 
    2L, 4L, 43L, 5L, 10L, 4L, 22L, 132L, 394L, 6L, 2L, 5L, 6L, 
    66L, 106L), Percentage = c(2.49, 11, 87, 6.06, 10, 83, 1, 
    100, 3.7, 7, 80, 9, 71, 29, 3.97, 24, 71, 1, 29, 71, 3.37, 
    37, 60), tot = c(75L, 301L, 1313L, 75L, 301L, 1313L, 15L, 
    1313L, 75L, 301L, 1313L, 15L, 301L, 1313L, 75L, 301L, 1313L, 
    15L, 301L, 1313L, 75L, 301L, 1313L), business_per = c(4, 
    18, 77, 4, 18, 77, 0.88, 1, 77, 4, 18, 0.88, 77, 1, 18, 77, 
    4, 0.88, 18, 77, 1, 18, 77)), .Names = c("Business", "Status", 
"Status Count", "Percentage", "tot", "business_per"), row.names = c(NA, 
-23L), class = c("tbl_df", "tbl", "data.frame"))



#create the legend
MStatus=paste(df$Status,"(",df$tot,")",df$business_per,"%")

, а вот диаграмма, созданная с новым фреймом данных:

enter image description here

1 Ответ

0 голосов
/ 05 марта 2019

Наконец я выяснил, в чем проблема:

в df, где business_per использовался при построении легенды, которая должна была быть одинаковыми числами для каждого статуса.Виновником была следующая строка:

df$business_per[df$business_per>=1] <- round(df$business_per,0)

, где это должно было быть:

df$business_per[df$business_per>=1] <- round(df$business_per[df$business_per>=1],0)
...