Почему отображаются только некоторые из отметок и как я могу показать их все? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть диаграмма, которая показывает данные за неделю.

Проблема в том, что она не показывает все значения даты на оси (код ниже):

enter image description here

Как это исправить, чтобы показать все 7 значений даты?

Код:

Набор данных:

us_chats <- structure(list(date = structure(c(1524783600, 1524870000, 1524870000, 
1524956400, 1525042800, 1525042800, 1525129200, 1525129200, 1525215600, 
1525215600, 1525302000), class = c("POSIXct", "POSIXt"), tzone = ""), 
    type = c("Completed", "Completed", "Missed", "Completed", 
    "Completed", "Missed", "Completed", "Missed", "Completed", 
    "Missed", "Completed"), count = c(2L, 2L, 1L, 1L, 7L, 2L, 
    2L, 1L, 5L, 4L, 4L)), row.names = c(NA, -11L), class = "data.frame")

Код диаграммы:

us_chats %>%
  spread(type, count, fill = 0) %>%   # Spread the count column in missed and completed
  mutate(Total = Completed + Missed) %>%   # Create the Total column
  ggplot(aes(date, Total)) + 
  geom_col(aes(fill = "Total"),
           colour = "black") + # total bar (with stat = "identity")
  geom_col(aes(y = Missed, fill = "Missed"),
           colour = "black") + # missed bar
  geom_text(aes(label = paste("Total chats:", Total)), # add total label
            hjust = -0.05, vjust = 1) + 
  geom_text(aes(label = paste("Missed chats:", Missed, "(", round(Missed/Total*100, 2), "%)")), # add missed label and calculate percentage
            hjust = -0.05, vjust = -0.5, color = "red") + 
  scale_fill_manual(name = "",  # Manual fill scale
                    values = c("Total" = "forestgreen", "Missed" = "red")) +
  scale_y_continuous(limits = c(0, max(us_chats$count) * 3)) + # Make labels visible
  coord_flip() # switch x and y axes

1 Ответ

0 голосов
/ 11 мая 2018

Джек Брукс предложил использовать scale_x_date(date_breaks = "1 day"). Это не совсем работает, потому что требует, чтобы данные были класса Date. К сожалению, это немного двусмысленно, потому что дата, соответствующая времени, зависит от вашего часового пояса. Если вы оказались в часовом поясе NZ, то это может дать вам то, что вы хотите:

us_chats %>%
  spread(type, count, fill = 0) %>%   # Spread the count column in missed and completed
  mutate(Total = Completed + Missed) %>%   # Create the Total column
  ggplot(aes(as.Date(date, tz = "NZ"), Total)) + 
  geom_col(aes(fill = "Total"),
           colour = "black") + # total bar (with stat = "identity")
  geom_col(aes(y = Missed, fill = "Missed"),
           colour = "black") + # missed bar
  geom_text(aes(label = paste("Total chats:", Total)), # add total label
            hjust = -0.05, vjust = 1) + 
  geom_text(aes(label = paste("Missed chats:", Missed, "(", round(Missed/Total*100, 2), "%)")), # add missed label and calculate percentage
            hjust = -0.05, vjust = -0.5, color = "red") + 
  scale_fill_manual(name = "",  # Manual fill scale
                    values = c("Total" = "forestgreen", "Missed" = "red")) +
  scale_y_continuous(limits = c(0, max(us_chats$count) * 3)) + # Make labels visible
  scale_x_date(date_breaks = "1 day", name = "Date") +
  coord_flip()

Вы можете использовать OlsonNames(), чтобы увидеть список названий часовых поясов, которые распознает R. Ваша система может принимать и другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...