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

如何在Python版Shiny中为Plotly图表配置displayModeBar选项?

Python Shiny中隐藏Plotly图表模式栏的解决方案及语言差异原因

解决办法

无需使用fig.show(config=...)或者强制转换为go.FigureWidget(),直接给Plotly Figure对象设置config属性即可,修改后的完整代码如下:

from shiny import ui, App 
from shinywidgets import output_widget, render_widget
import plotly.express as px

app_ui = ui.page_fluid(
    output_widget("plotly")
)

def server(input, output, session):
    @render_widget
    def plotly():
        df = px.data.gapminder().query("country=='Canada'")
        fig = px.line(df, x="year", y="lifeExp", title='加拿大预期寿命变化')
        # 直接设置config隐藏模式栏
        fig.config = {'displayModeBar': False}
        return fig

app = App(app_ui, server)

如果你的Plotly版本较旧,直接设置fig.config无效,可以改用plotly.io.to_html生成带配置的HTML,再通过ui.HTML()返回:

from shiny import ui, App 
import plotly.express as px
import plotly.io as pio

app_ui = ui.page_fluid(
    ui.output_ui("plotly")
)

def server(input, output, session):
    @ui.render_ui
    def plotly():
        df = px.data.gapminder().query("country=='Canada'")
        fig = px.line(df, x="year", y="lifeExp", title='加拿大预期寿命变化')
        # 生成带配置的HTML片段
        plot_html = pio.to_html(fig, config={'displayModeBar': False}, full_html=False)
        return ui.HTML(plot_html)

app = App(app_ui, server)

语言差异原因

R语言的plotly包与Shiny的集成是深度定制的:R的Plotly对象本身内置了config配置接口,通过fig %>% config(displayModeBar = FALSE)就能直接将配置绑定到图表对象,Shiny渲染时会自动读取并应用这些配置。

而Python的Plotly最初设计时,config参数仅在fig.show()方法中生效,用于控制独立浏览器标签页的渲染行为。早期shinywidgets依赖FigureWidget实现交互式渲染,但FigureWidget的配置逻辑与普通Figure不一致,导致无法直接传递config。后续Plotly Python库更新,允许直接给Figure对象设置config属性,shinywidgets也同步适配了该特性,现在直接设置fig.config即可在Shiny场景中生效。

内容的提问来源于stack exchange,提问作者Escalen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:34:52