You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:15:31