在Spyder中使用Plotly:在单个浏览器窗口展示多幅图表
嘿,我来帮你搞定这个问题!在Spyder里用Plotly生成多幅图表时,默认每次调用plot()都会打开新窗口,但我们有两种简单的方法把它们整合到同一个浏览器页面里:
方法1:用Plotly子图(Subplots)合并成单个Figure
这是最直接的方案,把两个图表放到同一个Plotly Figure对象的子布局中,这样展示时就只会弹出一个窗口,图表按你设定的排列方式展示。
代码示例:
import plotly.express as px from plotly.subplots import make_subplots # 生成你的两个散点图 fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16]) fig_1 = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 2, 5, 7, 9]) # 创建2行1列的子图布局,还可以自定义子图标题 subplot_fig = make_subplots(rows=2, cols=1, subplot_titles=("平方趋势散点图", "自定义趋势散点图")) # 把两个图表的轨迹分别添加到对应的子图位置 subplot_fig.add_trace(fig.data[0], row=1, col=1) subplot_fig.add_trace(fig_1.data[0], row=2, col=1) # 可选:调整子图的轴标签和整体布局 subplot_fig.update_xaxes(title_text="X值", row=1, col=1) subplot_fig.update_yaxes(title_text="Y值", row=1, col=1) subplot_fig.update_xaxes(title_text="X值", row=2, col=1) subplot_fig.update_yaxes(title_text="Y值", row=2, col=1) subplot_fig.update_layout(height=700, width=800, title_text="合并后的图表集合") # 在Spyder中展示合并后的图表 subplot_fig.show()
这里用make_subplots定义好布局后,把每个图表的data(也就是绘图轨迹)添加到指定的行和列,最后调用show()就会在同一个浏览器窗口里展示两个上下排列的图表。
方法2:生成包含多幅图表的HTML页面
如果想让每个图表保持独立的原始布局,只是放在同一个页面里(比如中间加标题、分隔线),可以把每个图表转换成HTML片段,再合并成一个完整的HTML文件打开。
代码示例:
import plotly.express as px import webbrowser # 生成你的两个散点图 fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16]) fig_1 = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 2, 5, 7, 9]) # 把图表转换成HTML片段,注意第一个图表加载Plotly JS,第二个不重复加载 fig_html = fig.to_html(full_html=False, include_plotlyjs='cdn') fig1_html = fig_1.to_html(full_html=False, include_plotlyjs=False) # 拼接成完整的HTML页面,还可以加自定义的标题、分隔线 combined_html = f""" <html> <head> <title>我的Plotly图表集合</title> <style>hr {{margin: 30px 0;}}</style> </head> <body> <h1>两幅散点图展示</h1> <h2>第一幅:平方关系</h2> {fig_html} <hr> <h2>第二幅:自定义趋势</h2> {fig1_html} </body> </html> """ # 保存HTML文件到本地 with open("combined_plots.html", "w", encoding="utf-8") as f: f.write(combined_html) # 直接在浏览器中打开这个文件 webbrowser.open("combined_plots.html")
这种方式生成的HTML文件可以反复打开,而且每个图表都是独立的,你还可以自由调整页面的样式和布局,灵活性更高。
内容的提问来源于stack exchange,提问作者Ben H
相关产品推荐
相关产品推荐

