Использование scale_color_gradient2 с переменной класса Date - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь раскрасить по дате с помощью ggplot2, но когда я пытаюсь настроить цвет с помощью scale_color_gradient2, я получаю сообщение об ошибке: Error in as.Date.numeric(value) : 'origin' must be supplied.

Я не могу понять,как передать источник в scale_color_gradient2.

. Я привел пример ниже.Любой совет?

set.seed(1)
x1 <- rnorm(100)
x2 <- rnorm(100)
day <- sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 100)

myData <- data.frame(x1, x2, day)

# this plot works as expected
ggplot(myData, aes(x = x1, y = x2, color = day)) + geom_point()

# scale_color_gradient2() asks for an origin, but I can't figure out how to supply one
ggplot(myData, aes(x = x1, y = x2, color = day)) + geom_point() +
    scale_color_gradient2()

1 Ответ

0 голосов
/ 15 февраля 2019

В scale_color_gradient2 необходимо добавить две вещи: trans = "date"* и разумное midpoint (по умолчанию 0).Я использовал mean «день».Обратите внимание, что вам нужна числовая версия среднего значения в scale:

ggplot(myData, aes(x = x1, y = x2, color = day)) +
  geom_point() +
  scale_color_gradient2(trans = "date", midpoint = as.numeric(mean(myData$day)))

enter image description here


Вы можете изменить разрывы по умолчаниюи ярлыки в легенде.Сначала создайте последовательность разрывов, используя seq или pretty:

brk <- seq.Date(min(myData$day), max(myData$day), by = "3 month")
# brk <- pretty(myData$day)

Установите breaks и labels с желаемыми format в вашей шкале:

scale_color_gradient2(trans = "date", midpoint = as.numeric(mean(myData$day)), 
                      breaks = brk,
                      labels = format(brk, "%Y-%m")) 

Редактировать следующий комментарий:

Использовать scale_color_gradient2 с POSIXct переменная

Добавить trans = "time" и разумный midpoint в scale_color_gradient2.Здесь я использую среднее время.Обратите внимание, что вам нужна числовая версия среднего значения в scale.

# some data
d <- data.frame(x = 1:10, y = 1, time = as.POSIXct("2019-02-15 12:00") + 1:10)

ggplot(d, aes(x = x, y = y, color = time)) +
  geom_point() +
  scale_color_gradient2(trans = "time", midpoint = as.numeric(mean(d$time)))

enter image description here


Возможно изменение разрывов и надписей в легенде, например,

brk <- pretty(d$time)

ggplot(d, aes(x = x, y = y, color = time)) +
  geom_point() +
  scale_color_gradient2(trans = "time", midpoint = as.numeric(mean(d$time)),
                        breaks = brk, labels = format(brk, format = "%H:%M:%S"))

*В текущей версии ggplot2 (3.1.0) из документов не очевидно, что существуют trans = "date" и trans = "time".Они не упоминаются ни в аргументе trans в ?scale_color_gradient и др., Ни в ?continuous_scale.Тем не менее, я представил проблему, поэтому надеюсь, что документы будут обновлены в следующем выпуске.

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