将自定义颜色渐变映射到POSIXct值

时间:2017-02-20 21:28:05

标签: r datetime ggplot2 colors posixct

数据:

df1 <- structure(list(Index = 1:11, Duration = structure(c(1487577655, 
1487577670, 1487577675, 1487577680, 1487577685, 1487577680, 1487577700, 
1487577705, 1487577695, 1487577700, 1487577680), class = c("POSIXct", 
"POSIXt"), tzone = "")), .Names = c("Index", "Duration"), class = "data.frame", row.names = 3:13)

现在我按如下方式构建图表:

g1 <- ggplot(df1, aes(x = Index, y = Duration, color = Duration))+
geom_point()+
geom_line()+
scale_y_datetime(labels = date_format("%M:%S"))

现在,色标设置为默认的“黑色”到“蓝色”渐变。

问题是,我在尝试为数据分配自定义渐变时遇到错误。

对于非POSIXct对象:

scale_color_gradient("Duration", low = "#D80427", high = "#07a0ff", space = "Lab")

有效,但是我将POSIXct对象df1$Duration作为解释变量得到以下错误:

  

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

在绘制POSIXct对象时,我需要使用不同的渐变函数吗?

2 个答案:

答案 0 :(得分:4)

您可以使用trans = time_trans()

library(ggplot2)
library(scales)
g1 +
  scale_color_gradient("Duration", low = "#D80427", high = "#07a0ff",
                       trans = time_trans())

enter image description here

如果您希望图例中的其他format个标签添加,例如labels = format(pretty(df1$Duration), "%M:%S")

答案 1 :(得分:1)

我们可以将日期转换为颜色数字:

library(ggplot2)
library(scales)

ggplot(df1, aes(x = Index, y = Duration, color = as.numeric(Duration))) +
  geom_point() +
  geom_line() +
  scale_y_datetime(labels = date_format("%M:%S")) +
  scale_color_gradient("Duration", low = "#D80427", high = "#07A0FF",
                       labels = c("00", "10", "20", "30", "40"))

根据@Henrik的建议,为避免硬编码,请使用以下标签:

# avoid hardcoding labels using pretty()
ggplot(df1, aes(x = Index, y = Duration, color = as.numeric(Duration))) +
  geom_point() +
  geom_line() +
  scale_y_datetime(labels = date_format("%M:%S")) +
  scale_color_gradient("Duration", low = "#D80427", high = "#07A0FF",
                       breaks = pretty(as.numeric(df1$Duration)),
                       labels = format(pretty(df1$Duration), "%M:%S"))