r - 将scale_color与类日期的变量一起使用会产生错误:as.Date.numeric(value):必须提供'origin'

标签 r date ggplot2 colors tidyverse

我正在尝试使用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()

最佳答案

scale_color_gradient2需要添加两件事:trans = "date" *和一个明智的midpoint(默认为0)。我使用了mean'day'。请注意,您需要在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



您可能需要更改图例中的默认中断和标签。首先,使用seqpretty创建一个中断序列:

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


在您的比例尺中将breakslabels设置为所需的format

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




编辑以下评论:

scale_color_gradient2POSIXct变量一起使用

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中提及它们。但是,我提交了一个问题,因此有望在下一个版本中更新文档。

关于r - 将scale_color与类日期的变量一起使用会产生错误:as.Date.numeric(value):必须提供'origin',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54699751/

相关文章:

r - 在 for 循环中使用 ggplot2 的多个图

java - 在 Java 中将任何日期字符串标准化为给定格式

r - 使用Cowplot时减少地 block 之间的边距

r - 使用主成分构建分数图

r - GGPLOT 曲线中的不同线型和固定颜色

r - 以编程方式将 Access (.mdb) 文件读入 R for Windows 和 Mac

r - R 和 MATLAB 中不同的 SVD 结果

r - 如何在 R 中永久更改 .libPaths()?

postgresql - 特定员工的最大日期和倒数第二个最大日期之间的差异 - postgresql

javascript - 添加日期以将当前日期设置为明天 - Javascript