如何将Plotly交互式图表导出后在ReactMarkdown中展示?
解决方案:在ReactMarkdown中嵌入Plotly交互式图表(无需直接获取HTML文件)
针对你无法获取生成的HTML文件、需要在ReactMarkdown中展示Plotly交互式图表的问题,提供以下可行方案:
方案1:导出Plotly图表的JSON配置,前端直接渲染
绕过HTML文件,把Plotly图表的配置转为JSON字符串,让React端用Plotly的React组件渲染:
- Python端生成图表的JSON配置:
import plotly.graph_objects as go import json fig = go.Figure(data=[go.Bar(y=[2, 3, 1])]) # 将图表转为字典后序列化为JSON字符串 fig_json = json.dumps(fig.to_dict()) print(fig_json)
- 将输出的JSON字符串嵌入到Markdown中(比如放在代码块或直接作为组件数据)。如果负责转换的脚本支持React组件渲染,可在Markdown中调用
react-plotly.js组件并传入该JSON:
<Plot data={fig_json.data} layout={fig_json.layout} />
若脚本仅支持纯Markdown,可把JSON作为代码块输出,让前端脚本读取并渲染。
方案2:生成可嵌入的Data URI iframe
把Plotly的完整HTML转为base64编码的Data URI,直接在Markdown中嵌入iframe:
- Python端生成Data URI格式的iframe标签:
import plotly.graph_objects as go import base64 fig = go.Figure(data=[go.Bar(y=[2, 3, 1])]) # 生成完整HTML字符串 html_content = fig.to_html(full_html=True) # 转为base64编码 encoded_html = base64.b64encode(html_content.encode('utf-8')).decode('utf-8') # 输出可直接嵌入Markdown的iframe标签 print(f'<iframe src="data:text/html;base64,{encoded_html}" width="100%" height="400" frameborder="0"></iframe>')
- 将输出的iframe标签直接粘贴到Markdown中。只要ReactMarkdown未过滤iframe标签,就能直接展示交互式图表,无需额外托管文件。
注意事项
- 方案1需要前端环境已引入
plotly.js或react-plotly.js依赖; - 方案2的Data URI方式兼容性较好,多数Markdown渲染器允许嵌入此类iframe;
- 若脚本严格过滤HTML标签,可优先尝试方案1,通过JSON传递图表配置。
内容的提问来源于stack exchange,提问作者Kelsey
相关产品推荐
相关产品推荐

