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

如何调整与设置Matplotlib子图?含双生子图尺寸调整需求

解决Matplotlib双生子图布局与尺寸适配问题

我看你当前的代码里有个容易踩的小坑:你先用fig, ax = plt.subplots(figsize=(8, 5))创建了一个单张子图,之后又用fig.add_subplot(121)手动添加子图,这会导致布局冲突,而且代码也不够简洁规范。

下面给你调整后的完整代码,不仅能实现1行2列的双生子图布局,还能方便你调整尺寸找到最合适的显示效果:

import matplotlib.pyplot as plt
import pandas as pd

# 导入数据(路径混合/和\在Windows下可正常识别)
df = pd.read_csv('C:\\Users\\Kevin\\Documents\\Afstudeer\\Measurements/1st_plot.txt', sep=',', decimal='.', header=None)
df.columns = ['Vx', 'Vy', 'undefined', 'Laser_signal']

# 直接创建1行2列的子图,同时设置整体图形尺寸
# figsize可灵活调整:宽不够就加大第一个数值,高不够调大第二个
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))  

# 第一个子图:绘制Vx与Vy的关系曲线
ax1.plot(df['Vx'], df['Vy'], linewidth=1.5, label='Vx-Vy Curve')
ax1.set_xlabel('Vx')
ax1.set_ylabel('Vy')
ax1.set_title('Vx vs Vy')
ax1.legend()
ax1.grid(alpha=0.3)  # 半透明网格不会遮挡曲线,提升可读性

# 第二个子图:绘制激光信号相关曲线(示例为与Vx关联,可按需修改)
ax2.plot(df['Vx'], df['Laser_signal'], color='#ff4444', linewidth=1.5, label='Laser Signal')
ax2.set_xlabel('Vx')
ax2.set_ylabel('Laser Signal')
ax2.set_title('Laser Signal vs Vx')
ax2.legend()
ax2.grid(alpha=0.3)

# 自动调整子图间距,避免标签、标题互相重叠
plt.tight_layout()

# 显示图形
plt.show()

几个实用的调整技巧:

  • 尺寸适配:如果子图的坐标轴标签/标题太长,把figsize的宽度调大(比如从12改成14);如果是竖排双生子图(2行1列),就把高度调大(比如figsize=(8, 10))。
  • 细节优化:用alpha参数设置网格透明度,给曲线加linewidth让线条更清晰;全局调整字体可以加plt.rcParams['font.size'] = 12。
  • 布局精细控制:如果需要更复杂的子图比例,可以用gridspec模块,但对于简单的双生子图,上面的写法已经足够好用。

内容的提问来源于stack exchange,提问作者kevin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:08