r - 带工具提示的 Ggplotly 在使用 geom_rect() 时出现问题

标签 r ggplot2 plotly r-plotly ggplotly

我正在尝试在 ggplotly 图中绘制一些数据。 x 轴包含日期。 Ggplotly 不能很好地处理日期,因为当我将鼠标悬停在某个点上时,日期会显示为数字。 我通过设置如下所示的工具提示解决了这个问题。

一些示例数据:

x <- data.frame(Date = as.Date(seq(Sys.Date(), Sys.Date() + 29, by = "days")), Amount = seq(-10000, 19000, by = 1000),
            stringsAsFactors = FALSE)

剧情:

ggplotly(ggplot(x, aes(x = Date, y = Amount, group = 1, text = paste("Date: ", Date, "<br>Amount: ", Amount))) + geom_line() + geom_point() 
     , tooltip = "text")

现在我想使用 geom_rect() 根据 y 轴的值获取一些背景颜色。这给我带来了问题,因为矩形似乎放置在 geom_line() 的顶部。另外,矩形也由 ggplotly 标记,我也不想要。 这是我尝试过的代码(当我不使用自定义工具提示时,背景颜色工作正常,但标签中的日期出现问题):

ggplotly(ggplot(x, aes(x = Date, y = Amount, group = 1, text = paste("Date: ", Date, "<br>Amount: ", Amount))) + geom_line() + geom_point() 
     +
       geom_rect(aes(xmin = as.Date(Sys.Date()),
                     xmax = as.Date(Sys.Date() + 30),
                     ymin = 10000, ymax = max(max(x$Amount) + 1000, 11000), fill = "1")) +
       geom_rect(aes(xmin = as.Date(Sys.Date()),
                     xmax = as.Date(Sys.Date() + 30),
                     ymin = 0, ymax = 10000, fill = "2")) +
       geom_rect(aes(xmin = as.Date(Sys.Date()),
                     xmax = as.Date(Sys.Date() + 30),
                     ymin = min(min(x$Amount) - 1000, 0), ymax = 0, fill = "3"))
     +
       scale_fill_manual(values = alpha(c("green", "orange", "red"), 0.2))
     , tooltip = "text")

Result

如有任何帮助,我们将不胜感激,谢谢!

编辑:

以下代码可以使 geom_rect() 正常工作:

ggplotly(ggplot(x, aes(x = Date, y = Amount)) + geom_line() + geom_point() 
     +
       geom_rect(aes(xmin = as.Date(Sys.Date()),
                     xmax = as.Date(Sys.Date() + 30),
                     ymin = 10000, ymax = max(max(x$Amount) + 1000, 11000), fill = "1")) +
       geom_rect(aes(xmin = as.Date(Sys.Date()),
                     xmax = as.Date(Sys.Date() + 30),
                     ymin = 0, ymax = 10000, fill = "2")) +
       geom_rect(aes(xmin = as.Date(Sys.Date()),
                     xmax = as.Date(Sys.Date() + 30),
                     ymin = min(min(x$Amount) - 1000, 0), ymax = 0, fill = "3"))
     +
       scale_fill_manual(values = alpha(c("green", "orange", "red"), 0.2)))

Result

最佳答案

你可以试试这个:

ggplotly(ggplot() +
           geom_rect(data = x, aes(xmin = as.Date(Sys.Date()),
                         xmax = as.Date(Sys.Date() + 30),
                         ymin = 10000, ymax = max(max(x$Amount) + 1000, 11000), fill = "1")) +
           geom_rect(data = x, aes(xmin = as.Date(Sys.Date()),
                         xmax = as.Date(Sys.Date() + 30),
                         ymin = 0, ymax = 10000, fill = "2")) +
           geom_rect(data = x, aes(xmin = as.Date(Sys.Date()),
                         xmax = as.Date(Sys.Date() + 30),
                         ymin = min(min(x$Amount) - 1000, 0), ymax = 0, fill = "3")) + 
           geom_line(data = x, aes(x = Date, y = Amount, group = 1, text = paste("Date: ", Date, "<br>Amount: ", Amount))) + 
           geom_point(data = x, aes(x = Date, y = Amount, text = paste("Date: ", Date, "<br>Amount: ", Amount))) +
                 scale_fill_manual(values = alpha(c("green", "orange", "red"), 0.2))
               , tooltip = "text")

关于r - 带工具提示的 Ggplotly 在使用 geom_rect() 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887710/

相关文章:

r - 在 R Markdown 中指定 CSL 时无法编译

r - 观察另一个模块中的事件

r - 如何为 R 中的绘图箱线图自定义悬停文本

r - 在绘图圆环图 r 中隐藏标签

r - 当系列中的所有值都相同时,geom_violin 会产生错误

node.js - 如何在 Plotly 中显示所有 x 轴刻度值?

r - 如何使用 Tidyverse 在 R 中聚合凌乱的季度数据,搜索第一组连续的四个季度

python - 使用 rpy2 映射 python 元组和 R 列表?

r - ggplot2 中的 panel.border 在 Cairo PDF 设备的图的底部和右侧绘制粗线

r - 使用 ggplot geom_line 可视化两年之间的差异