带有工具提示的ggplotly在使用geom_rect()时遇到问题 [英] Ggplotly with tooltip has problems using geom_rect()

查看:68
本文介绍了带有工具提示的ggplotly在使用geom_rect()时遇到问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to plot some data in a ggplotly plot. The x-axis contains dates. Ggplotly doesn't work well with dates as when I hover over a point, the date is displayed as a number. I solved this by setting a tooltip like below.

一些示例数据:

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标记,我也不想要.这是我尝试过的代码(当我不使用自定义工具提示时,背景色可以正常工作,但是出现标签中日期的问题):

Now I want to use geom_rect() to get some background colors depending on the value of the y-axis. This gives me problems as the rectangles seem to be placed on top of the geom_line(). Also, the rectangles are labeled by ggplotly too, which I don't want either. Here is the code I tried (the background coloring works fine when I am not using a custom tooltip, but then the problem with the dates in the labels occurs):

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")

结果

任何帮助将不胜感激,谢谢!

Any help would be appreciated, thanks!

以下代码可导致geom_rect()工作:

The following code results in working 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)))

结果

推荐答案

您可以尝试以下方法:

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")

这篇关于带有工具提示的ggplotly在使用geom_rect()时遇到问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆