Если вы переписываете его как «чистый» сюжет (без преобразования ggplotly
), это будет намного быстрее. Около 3000 раз даже. Вот результат очень маленького теста:
Unit: milliseconds
expr min lq mean median uq max neval
a 9929.8299 9929.8299 9932.49130 9932.49130 9935.1527 9935.1527 2
b 3.1396 3.1396 3.15665 3.15665 3.1737 3.1737 2
Причина, по которой ggplotly
намного медленнее, заключается в том, что он не распознает входные данные как тепловую карту и создает диаграмму рассеяния, где каждый прямоугольник рисуется отдельно со всеми необходимые атрибуты. Вы можете посмотреть на результат JSON, если обернуть результат ggplotly
или plot_ly
в plotly_json()
.
. Вы также можете проверить object.size
графиков, где вы увидите, что объект ggplotly
имеет размер 4616,4 КБ , а карта plotly
- просто 40,4 КБ большая.
df_colors = data.frame(range=c(0:13), colors=c(0:13))
color_s <- setNames(data.frame(df_colors$range, df_colors$colors), NULL)
for (i in 1:14) {
color_s[[2]][[i]] <- pal_simpsons("springfield")(13)[[(i + 1) / 2]]
color_s[[1]][[i]] <- i / 14 - (i %% 2) / 14
}
plot_ly(data = confirmed, text = text) %>%
plotly::add_heatmap(x = ~as.factor(date),
y = ~reorder(`Country/Region`, `cases count`),
z = ~as.numeric(factor(confirmed$`cnt.cat`, ordered = T,
levels = unique(confirmed$`cnt.cat`))),
xgap = 0.5,
ygap = 0.5,
colorscale = color_s,
colorbar = list(tickmode='array',
title = "Cases",
tickvals=c(1:7),
ticktext=levels(factor(x = confirmed$`cnt.cat`,
levels = unique(confirmed$`cnt.cat`),
ordered = TRUE)), len=0.5),
text = ~paste0("country: ", `Country/Region`, "<br>",
"Number of cases: ", `cases count`, "<br>",
"Category: ", `cnt.cat`),
hoverinfo ="text"
) %>%
layout(plot_bgcolor='black',
xaxis = list(title = ""),
yaxis = list(title = ""));