使用POSIXt对象更改连续色阶

时间:2016-12-16 14:16:45

标签: r ggplot2

假设我们在2D空间中有一系列位置随时间变化:

start.time <- strptime("2016-11-22_15-44-24",
                       format = "%Y-%m-%d_%H-%M-%S",
                       tz = "UTC")

end.time <- strptime("2016-11-22_17-25-12",
                     format = "%Y-%m-%d_%H-%M-%S",
                     tz = "UTC")
date <- seq.POSIXt(from = start.time, to = end.time, length.out = 100)
a <- seq(0, 10, length.out = 100)
x <- a * cos(a)
y <- a * sin(a)
my.df <- data.frame(date, x, y)

ggplot(my.df, aes(x, y, color = date)) + geom_point()

这给出了以下图表:

enter image description here

现在我想将调色板更改为更“动态”的颜色,比如颜色酿酒师的 Spectral 调色板。

关注this answer,我使用了这些命令:

myPalette <- colorRampPalette(rev(brewer.pal(11, "Spectral")))
sc <- scale_colour_gradientn(colours = myPalette(100))

ggplot(my.df, aes(x, y, color = date)) + geom_point() + sc

但我有一个错误:

  

Ops.POSIXt((x - 来自[1]),diff(来自))出错:   '/'未定义为“POSIXt”对象

(从我得到的实际错误中粗略翻译,这是半英文/半法文)。

我想在某些时候,scale_color_gradientn会尝试将我的时间刻度分成相等的部分,但由于它不知道如何划分日期而无法这样做。

那我该怎么办?

1 个答案:

答案 0 :(得分:3)

你可以使用scale_color_distiller进行一些小数字工作:

library(lubridate)
ggplot(my.df, aes(x, y, color = as.numeric(date))) +
    geom_point() +
    scale_color_distiller(palette = "Spectral",
                          breaks = as.numeric(my.df$date[c(1,50,100)]),
                          labels = paste0(hour(my.df$date[c(1,50,100)]), ":", minute(my.df$date[c(1,50,100)])),
                          name = "date")

enter image description here

scale_color_brewer仅适用于离散日期