如何用Python将多幅绘图展示在同一个窗口中?
如何将多个Matplotlib图表展示在同一个窗口中?
你的代码目前每次调用绘图函数都会创建新的独立窗口,要把所有图表整合到同一个窗口,需要使用Matplotlib的**子图(Subplot)**功能,将不同图表放在同一个Figure的不同子区域里。下面是修改后的完整代码:
import pandas as pd import matplotlib.pyplot as plt # 规范命名为plt,更符合通用习惯 def point_plot(ax, x, y, marker_type, title, color): # 接收子图对象ax,在指定子图上绘图 ax.plot(x, y, marker_type, color=color) ax.set_title(title) ax.grid(True) def linear_plot(ax, data_, title): # 使用ax参数指定绘图的子图,避免新建figure data_.plot(ax=ax) ax.set_title(title) ax.grid(True) # 读取CSV数据(简化读取逻辑,无需手动读取header) data_csv = pd.read_csv("sensor_data17.csv", delimiter=";", encoding="utf-8") # 创建一个包含2行2列子图的Figure fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10)) # 将每个图表对应到不同的子图位置 point_plot(axes[0, 0], data_csv["Pose X"], data_csv["Pose Y"], "o", "Pose", "black") point_plot(axes[0, 1], range(1, len(data_csv)+1), data_csv["Dust PPM"], "o", "Dust PPM", "green") linear_plot(axes[1, 0], data_csv[["Pressure Pa"]], "Pressure Pa") linear_plot(axes[1, 1], data_csv[["Lightning Lx", "Air quality PPM", "Temperature C","Humidity %","Altitude m","Loudness"]], "CSV Data") # 自动调整子图间距,避免标题、标签重叠 plt.tight_layout() # 保存整个窗口的所有图表(可选,也可以单独保存子图) plt.savefig("all_plots.png") # 展示整合后的窗口 plt.show()
关键改动说明:
- 创建统一Figure与子图:用
plt.subplots(nrows=2, ncols=2)生成一个包含4个子图的窗口,axes是一个2x2的数组,对应每个子图的位置。 - 修改绘图函数接收子图对象:让
point_plot和linear_plot接收ax参数,所有绘图操作(plot、set_title、grid)都绑定到这个子图对象上,不再创建新窗口。 - 简化数据读取:
pd.read_csv可以直接读取表头,无需手动用csv.reader获取header,简化代码。 - 适配动态数据行数:把
list(range(1,243))改成range(1, len(data_csv)+1),避免硬编码,适配不同行数的数据集。 - 自动优化布局:
plt.tight_layout()自动调整子图间的间距,防止标题、坐标轴标签等元素重叠。
如果需要调整子图布局(比如行数、列数、窗口大小),可以修改plt.subplots的nrows、ncols、figsize参数。
内容的提问来源于stack exchange,提问作者Edvard
相关产品推荐
相关产品推荐

