Ошибка: Дискретное значение передается в непрерывном масштабе при использовании ggplot - PullRequest
0 голосов
/ 29 августа 2018

Я построил диаграмму рассеяния с количеством частот на оси Y и датой (например, 2012-07) на оси X. Также я добавил вертикальные линии на график (вектор r1). После построения я получаю сообщение об ошибке

Ошибка: дискретное значение подается в непрерывную шкалу

Мой фрейм данных df1 выглядит так:

date         amount
2012-07          2
2012-08          4
2012-09          4
2012-10          3
2012-11          2
2012-12          3
2013-01          5 
2013-02          4
2013-03          3
2013-04          2
2013-05          1
2013-06          4
2013-07          3

А мои вертикальные линии находятся в векторе r1 и выглядят так:

1
2
4
6
7
9

Число 1 соответствует моей первой записи даты df1 $, число 2 - вторая запись и т. Д.

ggplot(df1, aes(x=date,y=amount, color=gr)) +    
            geom_vline(xintercept=as.numeric(r1), alpha=0.5) +    
            geom_point()

Полагаю, ошибка связана с тем фактом, что r1 имеет такие значения, как 1, 2, 5, но моя ось X имеет формат даты, который не совпадает. Таким образом, число 1 представляет мою первую дату в векторе r1, 2 - вторую дату и так далее ... Есть ли способ, которым я могу изменить этот вектор r1 на мои соответствующие даты? Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Как упоминает Кэт, вероятно, лучше изменить дату и строки в формат даты. Здесь я использую lubridate пакет

library(ggplot2)
library(dplyr)
library(lubridate)
df1 <- read.table(header = T, stringsAsFactors = FALSE, text = 
"date         amount
2012-07          2
2012-08          4
2012-09          4
2012-10          3
2012-11          2
2012-12          3
2013-01          5 
2013-02          4
2013-03          3
2013-04          2
2013-05          1
2013-06          4
2013-07          3"
)

r1 <- c(1,2,4,6,7,9)

df2 <- df1 %>% mutate(line = ifelse(row_number(date) %in% r1, date, NA)) %>% 
  mutate(date = ymd(date, truncated = 2), line = ymd(line, truncated = 2))

ggplot(df2, aes(x = date,y = amount, color = amount)) +    
  geom_vline(aes(xintercept = line), alpha=0.5) +    
  geom_point()

Примечание. Я изменил аргумент col на amount, поскольку gr не было в данных выборки.

0 голосов
/ 29 августа 2018

Вы можете начать с преобразования вашего столбца даты в форматированную дату propoer с помощью as.Date. Поскольку доступна только мотылек, я установил первый день месяца, но вы также можете указать 15-й.

df1$date <- as.Date(paste0(df1$date, "-01"))

Когда мы теперь строим данные, ось X красиво отформатирована:

library(ggplot2)

ggplot(df1, aes(date, amount)) +
  geom_point()

enter image description here

Для вертикальных линий извлеките требуемые даты из data.frame, а затем добавьте их на график:

ggplot(df1, aes(date, amount)) +
  geom_point() + 
  geom_vline(xintercept = df1$date[r1], alpha = 0.5)

enter image description here

Теперь это также работает, если вы переключаете порядок звонков

ggplot(df1, aes(date, amount)) + 
  geom_vline(xintercept = df1$date[r1], alpha = 0.5) +
  geom_point()

Данные

df1 <- 
  structure(list(date = c("2012-07", "2012-08", "2012-09", "2012-10", "2012-11", 
                          "2012-12", "2013-01", "2013-02", "2013-03", "2013-04", 
                          "2013-05", "2013-06", "2013-07"), 
                 amount = c(2L, 4L, 4L, 3L, 2L, 3L, 5L, 4L, 3L, 2L, 1L, 4L, 3L)), 
            class = "data.frame", row.names = c(NA, -13L))

r1 <- c(1, 2, 4, 6, 7, 9)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...