Я использую эту функцию для создания сюжетного объекта:
aligned_plot <- function(a_data, mapping, col_vector, col_label) {
color <- NULL
x_aes <- "rank"
y_aes <- "case_rank"
Max_Dim <- max(a_data$case_rank)
Max_Rank <- max(a_data$rank)
Max_Case_Rank <- max(a_data$case_rank)
a_data %>%
ggplot(aes_string(x = x_aes, y = y_aes)) +
scale_x_discrete(drop = FALSE) + scale_y_discrete(drop = FALSE) +
labs(x = "Activitys", y = "Traces") +
theme_light()-> p
if (Max_Dim > 400)
p + geom_point(aes(color = Activity)) + scale_color_manual(name = col_label, values = col_vector) -> p
else {
p + geom_raster(aes(fill = Activity)) +
geom_vline(xintercept = seq(.5, Max_Rank, by = 1), color = "gray90") +
geom_hline(yintercept = seq(.5, Max_Case_Rank, by = 1), color = "gray90") +
scale_color_manual(name = col_label, values = col_vector) -> p
}
return(p)
}
При интерактивном вызове этой функции в RStudio для создания графика требуется 0,43 секунды.
Эта функция используется на Shinydashboard:
output$Aligned_Chart <- renderUI({
addSpinner(plotlyOutput(ns("Aligned_Chart_Plotly"), height = 700), spin = "fading-circle", color = Spinner_Kleur)
})
output$Aligned_Chart_Plotly <- renderPlotly({
P_data <- rv$Doorloop_events
P_Map <- mapping(P_data)
P_data %>% aligned_data() %>% .$In_Scope %>%
aligned_plot(P_Map, col_vector(),
activity_id(P_data)) %>%
ggplotly()
})
Теперь для выполнения aligned_plot()
требуется примерно 2:20 минут. Кто-нибудь может объяснить, что вызывает эту задержку? (Max_Dim является вспомогательной переменной со значением 130, поэтому aligned_plot()
создает geom_raster)
Ben
После выяснения, как добавить Spinner, я мог пропустить вывод $ Aligned_Chart. Но на создание диаграммы все равно уходит около 2 минут, поэтому я решил использовать renderPlot:
output$Aligned_Chart_Plot <- renderPlot({
P_data <- rv_mod$Doorloop_events
P_Act <- activity_id(rv_mod$Doorloop_events)
P_Map <- mapping(P_data)
P_data %>% aligned_data() %>% .$In_Scope -> P_data
A_Plot <- aligned_plot(P_data, P_Map, col_vector(), P_Act)
A_Plot
})
aligned_data()
использует boxplot()
для обнаружения выбросов, и блок-график по умолчанию возвращает график. Вместо того, чтобы возвращать geom_raster, renderPlot()
визуализировал коробочный график. Это было исправлено заменой boxplot()
на UnivariateOutlierDetection()
. Теперь рендеринг моего сюжета занимает 4 секунды.
Однако при рендеринге с использованием графика, все равно требуется 1 минута для рендеринга объекта, созданного ggplotly()
.
Это нормально, что сюжет занимает так много времени?