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

Python中使用matplotlib.pyplot并排显示两个图表的问题求助

Python中使用matplotlib.pyplot并排显示两个图表的问题求助

嗨,我看了你遇到的问题啦!咱们先拆解一下你碰到的两个核心问题:第二个图表为空,以及没法让两个图并排显示。我帮你分析下原因,再给出修改后的代码方案~

问题分析

  1. 第二个图表为空:
    • 你第二个绘图里的标题用了plt.title(file),但file变量是第一个图表的文件名,这里应该换成第二个加载的dft才对,变量不匹配可能导致绘图逻辑异常;另外你原来的异常处理里,print("No record Found for {}")没有传入参数,会掩盖数据加载失败的问题,也会让你无法明确知道哪里出了错。
  2. 无法并排显示:
    • 你用了两个独立的plt.figure(),matplotlib默认会为每个figure打开单独的窗口,分开调用show()还会导致图表逐个弹出。要实现并排显示,应该用plt.subplots()创建子图布局,把两个图表放在同一个窗口的不同子区域里。

修改后的完整代码

import matplotlib.pyplot as plt
import pandas as pd
# 假设DayTimeMonth是你自己实现的模块,已提前导入

# 创建1行2列的并排子图,设置合适的窗口大小避免图表拥挤
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(18, 7))

# --- 第一个图表绘制逻辑 ---
# 这里假设df是你已加载好的第一个数据文件
df.set_index("Date", inplace=True)
# 直接指定在ax1子图上绘图
df[["inflow", "outflow"]].plot(kind='bar', color=['Green','Red'], ax=ax1)
ax1.set_xlabel("Date")
ax1.set_ylabel("Amount")
ax1.set_title(file)  # 确保file是第一个数据文件的文件名变量
ax1.tick_params(axis='x', rotation=45)  # 可选:旋转x轴标签避免重叠遮挡
fig.subplots_adjust(bottom=0.25)

# --- 第二个图表绘制逻辑 ---
Year = int(input("Which Years Data You Want to Visualise (YYYY): "))
Month = int(input("Enter Which month of above mentioned Year (MM): "))

# 转换月份数字为对应名称
MN = DayTimeMonth.Month_Name_oprational(Month)
dft = "{}-{}.csv".format(MN, Year)

try:
    df2 = pd.read_csv(dft)
except FileNotFoundError:
    print(f"No record Found for {MN} {Year}")
except pd.errors.EmptyDataError:
    print("Operations Cannot be performed on empty CSV file")
else:
    # 只有数据加载成功才执行绘图逻辑
    df2.set_index("Date", inplace=True)
    # 指定在ax2子图上绘图
    df2[["inflow", "outflow"]].plot(kind='bar', color=['Green','Red'], ax=ax2)
    ax2.set_xlabel("Date")
    ax2.set_ylabel("Amount")
    ax2.set_title(dft)  # 这里换成第二个数据文件的名称
    ax2.tick_params(axis='x', rotation=45)
    fig.subplots_adjust(bottom=0.25)

# 最后只需要调用一次plt.show(),就能同时显示两个并排的图表
plt.show()
input()

关键改动说明

  • 用plt.subplots(nrows=1, ncols=2)创建了1行2列的子图布局,ax1和ax2分别对应左右两个图表的绘图区域,替代原来的独立figure。
  • 绘图时通过ax=ax1/ax=ax2指定子图,确保两个图表在同一个窗口内排列。
  • 修复了第二个图表的标题变量,让它显示对应的数据文件名,同时完善了异常提示信息。
  • 把异常处理后的绘图逻辑放到else块里,只有数据加载成功才会绘图,避免出现空图。
  • 最后统一调用plt.show(),一次性显示所有子图,实现你想要的并排效果。

备注:内容来源于stack exchange,提问作者Weapon AS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:40:31