Как отобразить правильный порядок дат по оси x в ggplot после того, как они указаны как факторы, а не как класс дат - PullRequest
1 голос
/ 25 марта 2020

Я пытаюсь нанести даты на ось X и случаи на оси Y. У меня есть дата (то есть 28/02/2020), которая отсутствует в наборе данных. Когда я пытался построить график в ggplot, на оси x между 27/02/2020 и 29/02/2020 был промежуток. Я исследовал форум и обнаружил, что мне нужно превратить урок по датам в факторы, которые я сделал, и это сработало отлично. Однако сейчас я не могу сделать так, чтобы даты отображались так, как я хочу, на оси X, например, 27.02.2020 вместо 0020/02/27, как вы можете видеть на графике.

Мой код:

data<- structure(list(date = structure(25:1, .Label = c("0020-02-27", 
                                             "0020-02-29", "0020-03-01", "0020-03-02", "0020-03-03", "0020-03-04", 
                                             "0020-03-05", "0020-03-06", "0020-03-07", "0020-03-08", "0020-03-09", 
                                             "0020-03-10", "0020-03-11", "0020-03-12", "0020-03-13", "0020-03-14", 
                                             "0020-03-15", "0020-03-16", "0020-03-17", "0020-03-18", "0020-03-19", 
                                             "0020-03-20", "0020-03-21", "0020-03-22", "0020-03-23"), class = "factor"), 
           cases = c(69L, 71L, 104L, 36L, 91L, 92L, 57L, 48L, 23L, 128L, 
                     160L, 252L, 151L, 75L, 7L, 8L, 3L, 10L, 2L, 3L, 1L, 1L, 1L, 
                     1L, 1L)), class = "data.frame", row.names = c(1548L, 1549L, 
                                                                   1550L, 1551L, 1552L, 1553L, 1554L, 1555L, 1556L, 1557L, 1558L, 
                                                                   1559L, 1560L, 1561L, 1562L, 1563L, 1564L, 1565L, 1566L, 1567L, 
                                                                   1568L, 1569L, 1570L, 1571L, 1573L))
library(ggplot2)

a<- ggplot(data=data, aes(x=date, y=cases)) +
geom_bar(stat= "identity") +
theme(axis.text.x=element_text(angle=55, hjust=1))

a 

Заранее спасибо :)

1 Ответ

0 голосов
/ 25 марта 2020

Попробуйте это

data <- structure(list(
  date = structure(25:1, .Label = c(
    "0020-02-27",
    "0020-02-29", "0020-03-01", "0020-03-02", "0020-03-03", "0020-03-04",
    "0020-03-05", "0020-03-06", "0020-03-07", "0020-03-08", "0020-03-09",
    "0020-03-10", "0020-03-11", "0020-03-12", "0020-03-13", "0020-03-14",
    "0020-03-15", "0020-03-16", "0020-03-17", "0020-03-18", "0020-03-19",
    "0020-03-20", "0020-03-21", "0020-03-22", "0020-03-23"
  ), class = "factor"),
  cases = c(
    69L, 71L, 104L, 36L, 91L, 92L, 57L, 48L, 23L, 128L,
    160L, 252L, 151L, 75L, 7L, 8L, 3L, 10L, 2L, 3L, 1L, 1L, 1L,
    1L, 1L
  )
), class = "data.frame", row.names = c(
  1548L, 1549L,
  1550L, 1551L, 1552L, 1553L, 1554L, 1555L, 1556L, 1557L, 1558L,
  1559L, 1560L, 1561L, 1562L, 1563L, 1564L, 1565L, 1566L, 1567L,
  1568L, 1569L, 1570L, 1571L, 1573L
))

library(ggplot2)
library(dplyr)
library(stringr)
library(lubridate)
library(forcats)

a <- data %>% 
  mutate(date1 = stringr::str_replace(date, "0020", "2020"),
         date1 = lubridate::as_date(date1),
         date2 = format(date1, "%d-%m-%Y"),
         date2 = forcats::fct_reorder(date2, date1)) %>% 
  ggplot(aes(x = date2, y = cases)) +
  geom_bar(stat = "identity") +
  theme(axis.text.x = element_text(angle = 55, hjust = 1))
a

Создано в 2020-03-25 пакетом Представить (v0.3.0)

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