如何让Matplotlib在一个窗口中同时显示多个图表?
如何让Matplotlib同时显示所有图表(无需关闭前一个)
我明白你习惯了Jupyter里图表自动依次展示的流畅体验,在普通Python脚本里Matplotlib默认的阻塞式显示确实有点反直觉。这里有两种简单的方法解决这个问题:
方法1:使用非阻塞式显示模式
默认的plt.show()会暂停程序运行,直到你关闭当前图表窗口。我们可以给它加上block=False参数,让图表显示后程序继续执行,最后再用一个不带参数的plt.show()来保持所有窗口处于打开状态:
import numpy as np import pandas as pd import matplotlib.pyplot as plt housing = pd.read_csv("C:\\Users\\<username>\\handson-ml\\datasets\\housing\\housing.csv") # 第一个图表:非阻塞显示,程序继续向下执行 housing.hist(bins=50, figsize=(20,15)) plt.show(block=False) housing["income_cat"] = np.ceil(housing["median_income"]/1.5) housing["income_cat"].where(housing["income_cat"]<5, 5.0, inplace=True) # 第二个图表:同样非阻塞,最后用plt.show()维持所有窗口 plt.hist(housing["income_cat"]) plt.show()
方法2:将图表放在同一个窗口的子图中
如果希望所有图表在一个窗口里有序展示(类似Jupyter里的连续输出),可以用subplots创建子图布局,一次性显示所有内容:
import numpy as np import pandas as pd import matplotlib.pyplot as plt housing = pd.read_csv("C:\\Users\\<username>\\handson-ml\\datasets\\housing\\housing.csv") # 创建2行1列的子图布局,调整整体尺寸适配两个图表 fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(20, 25)) # 在第一个子图绘制房屋数据的直方图 housing.hist(bins=50, ax=ax1) ax1.set_title("Housing Dataset Histograms") # 处理收入分类数据 housing["income_cat"] = np.ceil(housing["median_income"]/1.5) housing["income_cat"].where(housing["income_cat"]<5, 5.0, inplace=True) # 在第二个子图绘制收入分类的直方图 ax2.hist(housing["income_cat"]) ax2.set_title("Income Category Distribution") # 自动调整子图间距,避免标题和图表内容重叠 plt.tight_layout() plt.show()
额外小技巧:模拟Jupyter的交互式体验
如果你想在Atom里完全复刻Jupyter的使用感,可以安装Hydrogen插件,它支持在Atom里逐单元格运行代码,图表会直接内嵌在编辑器中显示,不用手动调整plt.show()的参数,和Jupyter Notebook的体验几乎一致。
内容的提问来源于stack exchange,提问作者Ashwin
相关产品推荐
相关产品推荐

