假设我们在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()
这给出了以下图表:
现在我想将调色板更改为更“动态”的颜色,比如颜色酿酒师的 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会尝试将我的时间刻度分成相等的部分,但由于它不知道如何划分日期而无法这样做。
那我该怎么办?
答案 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")
scale_color_brewer
仅适用于离散日期