使用Matplotlib绘制矩形补丁时尺寸不一致,如何修复?
修复Matplotlib矩形补丁尺寸不一致问题
我用Matplotlib生成矩形补丁,明明设置了固定尺寸参数,却有部分矩形大小不一致,怎么让所有矩形保持相同尺寸?
代码示例:
import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.patches import Rectangle from matplotlib.colors import Normalize from matplotlib import cm fig,ax = plt.subplots(1) n=67 i=1 j=5 Factor=1000 for i in range(0, n): rect = mpl.patches.Rectangle((Factor+Factor*i, Factor+Factor*j), 10*n, 10*n, linewidth=1, edgecolor='black', facecolor='black') ax.add_patch(rect) ax.set_xlim(left = 0, right = Factor*1.1*n) ax.set_ylim(bottom = 0, top = Factor*1.1*n) plt.show()
效果截图:
解决方案
问题根源是坐标轴纵横比不相等,Matplotlib默认会根据图表尺寸自动调整坐标轴缩放比例,导致原本正方形的矩形被拉伸变形。
只需在设置坐标轴范围后添加一行代码,强制坐标轴保持等比例:
ax.set_aspect('equal')
修改后的完整代码:
import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.patches import Rectangle fig,ax = plt.subplots(1) n=67 j=5 Factor=1000 for i in range(0, n): rect = mpl.patches.Rectangle((Factor+Factor*i, Factor+Factor*j), 10*n, 10*n, linewidth=1, edgecolor='black', facecolor='black') ax.add_patch(rect) ax.set_xlim(left = 0, right = Factor*1.1*n) ax.set_ylim(bottom = 0, top = Factor*1.1*n) ax.set_aspect('equal') # 强制坐标轴等比例 plt.show()
另外,原代码中开头定义的i=1会被循环变量覆盖,属于冗余代码,可直接删除,不影响功能且代码更整洁。
内容的提问来源于stack exchange,提问作者Klimt865
相关产品推荐
相关产品推荐

