Python Flask嵌入Plotly图表时如何隐藏Produced with Plotly标识
Flask嵌入Plotly隐藏官方"Produced with Plotly"标识解决方案
之前配置不生效的核心原因有两个:
- 用
PlotlyJSONEncoder序列化得到的JSON对象结构为{data: 图表数据数组, layout: 布局配置对象},前端直接将整个对象作为Plotly.plot的第二个参数(该参数位置要求传入图表数据数组)传入,参数位置错位,后续config配置根本没有被正确读取。 - 部分低版本Plotly.js的
Plotly.plot方法对config参数解析存在兼容问题,官方推荐使用Plotly.newPlot方法完成渲染,兼容性更好。
以下两种方案任选其一即可生效:
方案1:修正前端渲染逻辑(无需改动后端代码)
将原有JS渲染代码替换为如下写法,注意拆分传入data和layout参数,使用标准渲染方法:
<script type="text/javascript"> var graph = {{plotly_fig| safe}}; Plotly.newPlot( 'plotly-figure-id', graph.data, // 传入序列化后的图表数据 graph.layout, // 传入序列化后的布局配置 { displaylogo: false // 隐藏官方logo // 如需移除顶部工具栏其他多余按钮,可追加配置,例: // modeBarButtonsToRemove: ['sendDataToCloud', 'lasso2d'] } ); </script>
方案2:后端绑定配置(无需调整前端参数,稳定性更高)
直接在后端生成图表对象时将配置绑定到fig上,序列化后会自动包含配置项,前端无需额外传config即可生效。在绘图函数return前新增一行配置即可:
def plot_channel_contribution(path): data = pd.read_excel( path, sheet_name="Pie Chart Contribution", index_col=0, encoding="latin-1", ) data = data.reset_index() fig = px.pie( data, values="Total Contribution", names="Channel", title="Channel Contribution" ) fig.update_layout( title_x=0.5, autosize=False, width=1000, height=600, ) # 新增以下配置行,直接绑定隐藏logo的设置 fig.config = {"displaylogo": False} return json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)
验证提示:如果修改后logo仍显示,先清空浏览器缓存再测试,多数情况是本地缓存的旧版JS资源未更新导致配置失效。
内容的提问来源于stack exchange,提问作者JA-pythonista
相关产品推荐
相关产品推荐

