如何将Matplotlib散点图从矩形调整为正方形?
解决散点图XY轴范围一致但图表非正方形的问题
你遇到的核心问题是:虽然XY轴的数值范围、刻度步长完全一致,但Matplotlib默认会根据绘图窗口尺寸自动调整轴的显示比例,导致图表呈现矩形。要生成正方形图表,需要强制让坐标轴的显示比例相等(即轴上相同数值差对应的像素长度一致)。
修改后的代码
import numpy as np import matplotlib.pyplot as plt # 绘制散点图,复用同一个Axes对象 ax = ctrl_ra.plot.scatter(x='Control', y='Infection(Ra)', color='black', alpha=0.5) df_sig.plot.scatter(ax=ax, x='Control', y='Infection(Ra)', color='red', alpha=0.5, s=5) # 设置XY轴刻度(只需设置一次,因为ax2和ax是同一个轴) ax.set_xticks(np.arange(0,21,5)) ax.set_yticks(np.arange(0,21,5)) # 关键:强制坐标轴等比例,生成正方形图表 ax.set_aspect('equal', adjustable='box') plt.show()
关键说明
- 移除重复刻度设置:因为你用
ax=ax参数让df_sig.plot.scatter复用了第一个绘图的Axes对象,重复设置ax2的刻度完全多余,直接操作ax即可。 set_aspect('equal', adjustable='box')的作用:'equal'指定XY轴的显示比例严格相等,确保1单位的X轴长度和1单位的Y轴长度在屏幕上的像素数一致。adjustable='box'会自动调整轴框形状为正方形,适配等比例的轴设置。
替代方法
如果你习惯用pyplot全局接口,也可以在plt.show()前添加:
plt.axis('square')
这个命令会直接将当前图表设置为正方形,效果和上面的方法一致。
内容的提问来源于stack exchange,提问作者Caroline
相关产品推荐
相关产品推荐

