【问题标题】:R: Updating Hover TextR:更新悬停文本
【发布时间】:2021-02-12 23:59:01
【问题描述】:

我正在使用 R 编程语言。我使用 plotly 库制作了以下交互式图表:

library(dplyr)
library(ggplot2)
library(shiny)
library(plotly)
library(htmltools)

library(dplyr)
#generate data
set.seed(123)

######

var = rnorm(731, 85,25)
date= seq(as.Date("2014/1/1"), as.Date("2016/1/1"),by="day")
data = data.frame(var,date)

vals <- 90:100
combine <- vector('list', length(vals))
count <- 0
for (i in vals) {
    
    data$var_i = i
    data$new_var_i = ifelse(data$var >i,1,0)
    
    #percent of observations greater than i (each month)
    aggregate_i = data %>%
        mutate(date = as.Date(date)) %>%
        group_by(month = format(date, "%Y-%m")) %>%
        summarise( mean = mean(new_var_i))
    
    #combine files together
    
    aggregate_i$var = i
    aggregate_i$var = as.factor(aggregate_i$var)
    
    count <- count + 1
    combine[[count]] <- aggregate_i
    
}

result_2 <- bind_rows(combine)
result_2$group = "group_b"
result_2$group = as.factor(result_2$group)





graph <-ggplot(result_2, aes(frame = var, color = group)) + geom_line(aes(x=month, y=mean, group=1))+ theme(axis.text.x = element_text(angle=90)) + ggtitle("title") + facet_wrap(. ~ group)

graph = ggplotly(graph)

当用户将鼠标移到图表上的任意一点上时,会显示以下信息(悬停文本):

我正在尝试向悬停文本添加更多信息。例如:

result_2$tot = mean(result_2$mean)

> head(result_2)
# A tibble: 6 x 5
  month    mean var   group     tot
  <chr>   <dbl> <fct> <fct>   <dbl>
1 2014-01 0.387 90    group_b 0.364
2 2014-02 0.429 90    group_b 0.364
3 2014-03 0.452 90    group_b 0.364
4 2014-04 0.367 90    group_b 0.364
5 2014-05 0.355 90    group_b 0.364
6 2014-06 0.433 90    group_b 0.364

然而,当我使用这个result_2 文件制作新图表时,新信息不会出现在悬停文本中:

graph <-ggplot(result_2, aes(frame = var, color = group)) + geom_line(aes(x=month, y=mean, group=1))+ theme(axis.text.x = element_text(angle=90)) + ggtitle("title") + facet_wrap(. ~ group)

graph = ggplotly(graph)

#view graph

graph

谁能帮我解决这个问题?

谢谢

【问题讨论】:

    标签: r ggplot2 dplyr plotly data-visualization


    【解决方案1】:

    如果您想完全控制您的 hoverinfo,实际上最好创建一个 plotly 图表而不是 ggplot,然后使用 ggplotly()。如果您在 result_2 中只有一个组,如上面的示例所示,您可以使用

    result_2 %>%
      plot_ly(x=~month, y=~mean, color=~group) %>%
      group_by(group) %>%
      add_lines(frame=~var,hoverinfo = "text",
                text = ~ paste0("Month: ",month, "<br>",
                                "Mean: ", mean, "<br>",
                                "Total: ", mean(mean))) %>%
      layout(title = list(text = "title"),
             xaxis = list(tickangle = -90, tickformat = "%m-%Y"))
    

    或者,如果您在 result_2 中有 > 1 个组,并且您希望按照 ggplot 中的说明按组分面,您可以这样做:

    result_2 %>%
      group_by(group) %>%
      do(
        plot = plot_ly(data =., x=~month, y=~mean, color=~group) %>%
          add_lines(frame=~var,hoverinfo = "text",
                    text = ~ paste0("Month: ",month, "<br>",
                                    "Mean: ", mean, "<br>",
                                    "Total: ", mean(mean))) %>%
          layout(title = list(text = "title"),
                 xaxis = list(tickangle = -90, tickformat = "%m-%Y"))
      ) %>%
      subplot(shareX = TRUE, shareY = FALSE, nrows = 2) 
    

    但是,如果您只有一个组,那么这将不起作用,因此提供了两个选项。 您可以在text = ~paste0() 部分创建任何函数并编写任何您想要的内容,它会显示在您的 hoverinfo 中。

    【讨论】:

    • 感谢您的回答!这很完美!现在我将尝试花一些时间尝试理解您使用的代码逻辑。
    • 这几天我一直在研究这个问题:stackoverflow.com/questions/66161597/… .... 如果可以的话,你有时间可以看看吗?非常感谢您的所有帮助
    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2021-04-02
    • 2021-04-18
    • 2012-07-28
    • 2020-02-17
    • 1970-01-01
    相关资源
    最近更新 更多