如何在ggplot2中将difftime格式化为hh:mm?

同伴

我想使用ggplot2显示difftime数据,并且希望刻度格式为hh:mm

library(ggplot2)  

a= as.difftime(c("0:01", "4:00"), "%H:%M", unit="mins")
b= as.difftime(c('0:01', "2:47"), "%H:%M", unit="mins")

ggplot(data=NULL, aes(x=b, y=a)) + geom_point(shape=1) +    
                  scale_x_time(labels = date_format("%H:%M"), 
                               breaks = "1 hour")

但是我收到以下警告:

Don't know how to automatically pick scale for object of type difftime. Defaulting to continuous.
Warning message:
In structure(as.numeric(x), names = names(x)) : NAs introduced by coercion

这是一个图形: 在此处输入图片说明

更新:我的示例太少了,我还需要能够显示负差异,因此这将是更好的数据:

a= as.difftime(c(-60, -4*60),  unit="mins")
b= as.difftime(c(-60, 2*60+47), unit="mins")
ggplot(data=NULL, aes(x=b, y=a)) + geom_point(shape=1)
乌韦

答案分为两个部分。

绘制difftime对象

根据help("scale_x_time")ggplot2支持三种日期/时间类:scale_*_date用于日期(类Date),scale_*_datetime用于日期时间(class POSIXct)和scale_*_time用于时间(类hms)。最后一个是我们在这里需要的。

hmsdifftime向量的自定义类as.hms()有一种方法difftime所以。difftime可以ggplot2通过强制类来绘制对象hms

a <- as.difftime(c(-60, -4 * 60),  unit = "mins")
b <- as.difftime(c(-60, 2 * 60 + 47), unit = "mins")
library(ggplot2)
ggplot(data = NULL, aes(x = hms::as.hms(b), y = hms::as.hms(a))) + 
  geom_point(shape = 1)

在此处输入图片说明

请注意,也会显示负时差。

格式化刻度标签

OP要求刻度线应以hh:mm格式标记显然,默认格式为hh:mm:ss可以通过指定一个函数来修改此函数,该函数将中断作为输入,并将标签作为输出返回给and函数labels参数scale_x_time()scale_y_time()

format_hm <- function(sec) stringr::str_sub(format(sec), end = -4L)
ggplot(data = NULL, aes(x = hms::as.hms(b), y = hms::as.hms(a))) + 
  geom_point(shape = 1) +
  scale_x_time(name = "b", labels = format_hm) +
  scale_y_time(name = "a", labels = format_hm)

在此处输入图片说明

format_hm()函数将截断:ss默认格式零件。此外,轴的标签也很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ggplot2中将多个标签格式化为单个图例

如何使用HH:MM:SS将difftime对象格式化为字符串

如何在javascript中将日期格式化为“E, d MMM yyyy HH:mm:ss zzz”?

如何在SQL Server中将时间从dd:hh:mm:ss格式化为仅hh:mm:ss?

如何在pyspark中使用regex_replace将日期从yyyymmdd重新格式化为yyyy / mm / dd,并将时间从HHmmss重新格式化为HH:mm:ss

我如何在Angular2中将sec转换为hh:mm:ss格式

如何在Angular 6中将材料datepicker日期值格式化为“ MM-DD-YYY”格式?

将 postgres 间隔正确格式化为 HH:MM

如何在ggplot2中将科学格式刻度标签更改为缩写形式

如何在Windows 7中将闪存驱动器格式化为UDF?

如何在Windows 10中将磁盘/ SD卡格式化为FAT32

如何在js中将MM/YYYY格式化为YYYY-MM

如何在Vue模板中将'YYYY-MM-DD'格式化为'DD.MM.YYYY'

如何使用Twig(Symfony)将时间格式化为hh:mm

如何将WPF计时器格式化为HH:MM:SS

如何在odoo v10中将“day, hh:mm:ss”格式转换为hh:mm

如何在ggplot2中将轴居中

如何在 MSSQL 中将 YYYY-MM-DD 格式化为 YYYY-WW

如何在邮递员中将{{$ timestamp}}格式化为MM / DD / YYYY?

如何在af:column adf表中将日期格式化为yyyy / mm / dd?

如何在Android中将Joda Time格式化为dd-mm-yyyy?

无法在Java中将时间戳格式化为YYYY-MM-DD HH:mm:ss

在moment.js中将日期时间格式化为YYYY-MM-DD HH:mm:ss

在Ruby中将日期/时间格式化为YYYY-MM-DD HH:MM:SS

如何使用NodeJS将UTC日期格式化为`YYYY-MM-DD hh:mm:ss`字符串?

如何从Excel中格式化为dd / mm / yyyy hh:mm的单元格中获得时差?

如何在python 3.5中将现有数据格式化为csv文件中的列

如何在Python中将mysql日期时间yyyy-mm-dd格式化为dd-mm-yyyy?

将“ YYYY-MM-DD HH:MM”时间戳格式化为日期