如何调整与设置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
相关产品推荐
相关产品推荐

