r - ggplotly 和 lubridate : Hoover shows seconds, 不是分钟

标签 r ggplot2 plotly lubridate ggplotly

我使用 ggplot 和以下 data.frame 创建了一个箱线图:

library(lubridate)
library(ggplot2)
library(ggplotly)

df <- data.frame(
  time = c("00:43:20", "00:44:30","00:45:40"),
  sex = c("m","m","m")
)

df$sex <- factor(df$sex)
df$time <- lubridate::hms(df$time)

现在我用 ggplot 创建了箱线图

g <- ggplot(df) +
  geom_boxplot(aes(sex, time)) +
  scale_y_time()

一切看起来都很好,现在可以与 ggploty() 进行交互:

plotly::ggplotly(g)

enter image description here

但是当我将鼠标悬停在箱线图上时,我只看到秒,而不是润滑格式。 如何查看 y 轴上显示的数据?

最佳答案

据我了解,这个问题相当复杂。主要问题似乎是 lubridate 将时间存储为句点。因此,你可以在plotly中得到秒,就像在ggplot中一样,它们也是秒,它们只是通过“scale_y_time”在比例上转换。

根据我的理解,工作方法是将时间值转换为分钟数值。虽然这意味着一分钟在逗号/点后有 100 秒:

ggplot 的第一个选项:

library(plotly)
library(ggplot)
library(lubridate)
# calculate time as minutes passed and get it as numeriic
mins <- as.numeric(lubridate::hms(df$time) - hms("00:00:00"))/60

df$sex <- factor(df$sex)
df$time <- mins 

g <- ggplot2::ggplot(df) +
       ggplot2::geom_boxplot(aes(sex, time)) 

plotly::ggplotly(g)

enter image description here

直接使用plotly的第二个选项(仅适用于文本数据,不确定您是否可以将性别F添加为x,​​或者您是否需要第二个跟踪,并且还需要完成一些修饰......无论如何,ggplot给出了几乎相同的结果)

plotly::plot_ly(y = ~mins, type = "box")

enter image description here

可能有更好的解决方案 - 我只是在过去 2 小时内无法弄清楚;(

关于r - ggplotly 和 lubridate : Hoover shows seconds, 不是分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64776096/

相关文章:

r - 在 ggplot 中添加一个带边界的新图

r - 使用 dplyr 根据多列中的值范围进行分类

r - 是否可以通过主题设置 geom_text 大小?

将神经网络输出限制为正值

r - 如何根据两个不同的组重写列

python - 你能改变 plotly 中的子 plotly 标题位置吗?

r - 如何在 R 中为悬停文本配置千位分隔符?

python - 如何使用 Plotly 制作简单的多级桑基图?

r - 使用箭头连接一项内但跨组的点

r - 如何在 ggplot 中按值重新排序轴后更改轴文本