【发布时间】:2020-06-30 22:22:18
【问题描述】:
我正在使用 Plotly 和 Shiny 构建一个 interactive time-series heatmap in R。作为此过程的一部分,我将热图值从连续格式重新编码为有序格式 - 所以我有一个热图,其中六种颜色代表特定的计数类别,这些类别是从聚合的计数值创建的。但是,这会导致使用ggplotly() 创建热图的速度出现重大性能问题。我已经将其追溯到 Plotly 的 tooltip() 函数,该函数呈现交互式框。来自我的热图中的标签数据以某种方式使这个函数过载,它执行得非常缓慢,即使我只是将一个标签组件添加到tooltip()。我正在使用来自 Johns Hopkins CSSE repository 的 COVID-19 爆发数据的处理子集。这是一个简化的热图代码,同样使用The Simpsons colour theme from ggsci:
#Load packages
library(shiny)
library(plotly)
library(tidyverse)
library(RCurl)
library(ggsci)
#Read example data from Gist
confirmed <- read_csv("https://gist.githubusercontent.com/GeekOnAcid/5638e37c688c257b1c381a15e3fb531a/raw/80ba9704417c61298ca6919343505725b8b162a5/covid_selected_europe_subset.csv")
#Wrap ggplot of time-series heatmap in ggplotly, call "tooltip"
ggplot_ts_heatmap <- confirmed %>%
ggplot(aes(as.factor(date), reorder(`Country/Region`,`cases count`),
fill=cnt.cat, label = `cases count`, label2 = as.factor(date),
text = paste("country:", `Country/Region`))) +
geom_tile(col=1) +
theme_bw(base_line_size = 0, base_rect_size = 0, base_size = 10) +
theme(axis.text.x = element_text(angle = 45, hjust = 1),legend.title = element_blank()) +
scale_fill_manual(labels = levels(confirmed$cnt.cat),
values = pal_simpsons("springfield")(7)) +
labs(x = "", y = "")
ggplotly(ggplot_ts_heatmap, tooltip = c("text","label","label2"))
一旦减少tooltip = c("text","label","label2")(例如减少tooltip = c("text")),性能就会提高。现在,我知道延迟不是“巨大的”,但我正在将它与 Shiny 应用程序集成。一旦它与 Shiny 集成并使用更多数据进行扩展,它真的非常非常慢。我什至没有在 tooltip 中显示所有变量,而且它仍然很慢 - 当您单击“已确认”案例时,您可以在 the current version of the app 中看到它。
有什么建议吗?我考虑过替代的交互式热图包,如 d3heatmap、heatmaply 和 shinyHeatmaply,但所有这些解决方案都更适用于相关热图,并且它们缺少 ggplot 的自定义选项。
【问题讨论】:
标签: r ggplot2 shiny heatmap ggplotly