Удаление шкал с ложными условиями :: долларовые метки на ifelse в geom_label - PullRequest
0 голосов
/ 05 июня 2018

пытается установить отдельные метки данных ТОЛЬКО, если значение отрицательное.Я смог сделать это нормально для переменной, состоящей из простых целых чисел, но для переменной, которая должна быть отформатирована как доллар с разделителем тысяч, я не могу избавиться от метки «NA».

DolSumPlot <- ggplot(data = DolSums, aes(x = Group.1, fill = Group.2)) + 
  geom_bar(aes(weight = x), position = position_stack(reverse = TRUE)) + 
  coord_flip() + 
  labs(title = "Dollars Billed by Technician and Shop, Between 02/01/2018 and 05/31/2018", 
       y = "Dollars Billed", x = "Technician", fill = "Shop") + 
  scale_y_continuous(limits= c(NA,NA),
                     labels = scales::dollar,
                     breaks = seq(0, 50000 + 10000, 5000*2),
                     minor_breaks = seq(0,50000 + 10000, by = 5000)) +
  scale_fill_brewer(palette = "Set1") + 
  geom_label(aes(label=scales::dollar(ifelse(DolSums$x < 0, DolSums$x,NA)), 
                 y = DolSums$x), 
             show.legend = FALSE, size = 2.6, colour = "white", fontface = "bold")

Данные:

DolSums = structure(list(Group.1 = c((names)), Group.2 = structure(c(4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
5L, 5L, 5L, 5L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Radio", 
"Video", "Engineering", "800Mhz", "PSSRP", "Other"), class = "factor"), 
    x = c(4646, 16008.5, 48793.1, 4040, 14468.25, 13332, 1565.5, 
    6060, 6549.85, 2929, 4444, 3257.25, 5904, 2029.5, 3321, 6767, 
    8105.25, 8105.25, 8130.5, 3131, 5075.25, 3383.5, 4418.75, 
    23381.5, 1363.5, -2323, 29133.45, 2550.25, 505, 26042.85, 
    35203.55, 35940.85, 1641.25, 45066.2, 37541.7, 606, 45439.9
    )), .Names = c("Group.1", "Group.2", "x"), row.names = c(NA, 
-37L), class = "data.frame")

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете сделать это, используя аргумент data в geom_label и подмножество только строк с отрицательным x.Также обратите внимание, что поскольку у вас уже есть DolSums в качестве ввода, нет необходимости писать DolSums$x.Вместо этого используйте имя столбца для прямой ссылки на определенный столбец:

library(ggplot2)

ggplot(data = DolSums, aes(x = Group.1, fill = Group.2)) + 
  geom_bar(aes(weight = x), position = position_stack(reverse = TRUE)) + 
  coord_flip() + 
  labs(title = "Dollars Billed by Technician and Shop, Between 02/01/2018 and 05/31/2018", 
       y = "Dollars Billed", x = "Technician", fill = "Shop") + 
  scale_y_continuous(limits= c(NA,NA),
                     labels = scales::dollar,
                     breaks = seq(0, 50000 + 10000, 5000*2),
                     minor_breaks = seq(0,50000 + 10000, by = 5000)) +
  scale_fill_brewer(palette = "Set1") + 
  geom_label(data = DolSums[DolSums$x < 0,], 
             aes(label=scales::dollar(x), 
                 y = x), 
             show.legend = FALSE, size = 2.6, colour = "white", fontface = "bold")
...