【问题标题】:Ggplotly with tooltip has problems using geom_rect()带有工具提示的 Ggplotly 在使用 geom_rect() 时出现问题
【发布时间】:2018-11-26 00:22:09
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: r ggplot2 plotly r-plotly ggplotly


    【解决方案1】:

    你可以试试这个:

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

    【讨论】:

    • 如果您将 group = 1 添加到 geom_line 美学中,它的工作原理就像 inteded。您可以在答案中进行编辑吗?无论如何,非常感谢!
    • 这就是我要求您更改它的原因;),再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2018-03-18
    • 1970-01-01
    相关资源
    最近更新 更多