Изменение порядка меток оси X в ggplot - PullRequest
0 голосов
/ 30 октября 2018

У меня есть даты как 'Dec-17','Jan-18','Feb-18','Mar-18','Apr-18','May-18','Jun-18','Jul-18','Aug-18' Когда я строю график, мне нужно сохранить это по оси X. Но ось X переупорядочена. Я испробовал метод факторов, затем тоже получаю:

> data_$Dates
[1] Apr-18 Aug-18 Dec-17 Feb-18 Jan-18 Jul-18 Jun-18 Mar-18 May-18
9 Levels: Apr-18 Aug-18 Dec-17 Feb-18 Jan-18 Jul-18 Jun-18 ... May-18

Но мне нужно следовать тому же форматированию, начиная с Dec-17, а не Apr-18 Мой код:

data_$Dates <- factor(data_$Dates, levels = data_$Dates[order(data_$`Expected`)])
data_$Dates
ggplot(data=data_, aes(x=Dates, y=`Expected`, group=1)) +
  geom_line()+
  geom_point()

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Давайте сначала сгенерируем пример данных:

set.seed(123)
data_ <- data.frame(Expected = sample(1:10, 9), Dates = c('Dec-17','Jan-18',
    'Feb-18','Mar-18', 'Apr-18', 'May-18','Jun-18', 'Jul-18', 'Aug-18'),
    stringsAsFactors = FALSE)

Как сказал @Wimpel, наиболее естественным способом является преобразование вашего столбца данных в столбец типа данных. Здесь вы можете найти всестороннее обсуждение возможных путей для этого. Одним из наиболее удобных решений является использование пакета lubridate:

library(lubridate)
data_$Dates_data <-  as.Date(parse_date_time(data_$Dates, "m-y"))

Теперь у вас есть столбец в формате даты, который будет использоваться в качестве x-данных, и вы можете настроить формат меток x в соответствии со своими предпочтениями (опять же, как предложил @Wimpel):

pl_1 <- ggplot(data = data_, aes(x = Dates_data, y = Expected, 
    group = 1)) +
  geom_line() +
  geom_point() +
  scale_x_date(date_labels = "%b-%y", date_breaks = "1 month")
plot(pl_1)
0 голосов
/ 30 октября 2018

Вы переупорядочиваете в алфавитном порядке. Возможно, вы захотите либо преобразовать ваши данные в тип данных, который интерпретируется как таковой (как это было предложено @Wimpel в его / ее комментарии). Кроме того, поскольку у вас есть только 9 уникальных значений, вы можете изменить порядок вручную:

date_$Dates <- factor(date_$Dates, levels = c("Dec-17", "Jan-18", "Feb-18"))

(который вам придется расширить, чтобы включить шесть месяцев, которые я пропустил).

...