You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在RStudio的flexdashboard+Shiny+Plotly可视化中如何用tryCatch处理报错?

在flexdashboard中处理无数据时的可视化报错

当选择无记录的参数时,你的可视化会因空数据报错,用tryCatch()可以捕获错误并显示友好提示,具体实现如下:

核心逻辑

将renderPlotly()内部的可视化渲染代码全部包裹在tryCatch()中,通过error参数定义报错时的替代显示内容(比如带提示文字的空图表)。

修改后的完整代码

### {data-width=498}
```{r}
# 时间序列数据处理(保留原逻辑即可)
timeseries88 <- reactive(selected_80() %>% 
  dplyr::group_by(Year, FECHAFACTURA, dia_año) %>%
  dplyr::summarise(VALORNETO = sum(VALORNETO)) %>% 
  mutate(text = paste("Año: ", Year, 
                      "\nVenta Neta: $", round(VALORNETO/1000000, 4), " M", 
                      "\nFecha: ", format(FECHAFACTURA, format = "%d/%m/%Y"), sep = "") ,
         fechames = format(FECHAFACTURA, "%d-%m")) %>%
  arrange(FECHAFACTURA)
)

renderPlotly({
  tryCatch(
    # 正常渲染图表的原代码
    expr = {
      ggplotly(ggplot(timeseries88(), aes(x = FECHAFACTURA, 
                                          y = VALORNETO,
                                          group = Year, 
                                          text = text))+
                 geom_point(size = 0.75, color = color_periodo_unico)+
                 geom_line(size = 0.3, color = color_periodo_unico)+
                 labs(x = "", y = "")+
                 theme(axis.text.x = element_text(angle = 60, hjust = 1),
                       legend.text = element_text(size = 8.5), 
                       text = element_text(size = 8.5), 
                       axis.ticks.x = element_blank(),
                       panel.background = element_blank()) +
                 scale_y_continuous(labels = unit_format(unit = "M", scale = 1e-6)),
             tooltip = "text") %>%
        layout(xaxis = list(autorange = TRUE), 
               yaxis = list(autorange = TRUE),
               showlegend = F, 
               title = list(text = 'Venta de Período', x = 0.05)) %>% 
        config(displayModeBar = F)
    },
    # 捕获错误时返回带提示的空图表
    error = function(e) {
      plotly_empty() %>%
        layout(title = list(text = "⚠️ 所选参数无匹配记录", x = 0.5),
               annotations = list(text = "请调整参数选择", x = 0.5, y = 0.5, showarrow = FALSE)) %>%
        config(displayModeBar = F)
    }
  )
})
## 关键说明
- `expr`参数:存放原本的可视化渲染代码,正常场景下执行这部分并返回图表。
- `error`参数:接受一个函数,参数`e`为捕获到的错误对象(可不用但需保留参数位),函数内部返回替代的plotly对象,这里用`plotly_empty()`生成空画布并添加提示文本。
- 可选优化:也可以在`timeseries88`这个reactive中先判断数据是否为空,提前返回空数据框再处理,但`tryCatch()`更通用,能覆盖数据类型错误、字段缺失等所有可能的报错场景。

内容的提问来源于stack exchange,提问作者Dan Valle
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 00:21:42