当添加颜色条时,Matplotlib绘图变成了非正方形

5
这是一个比较具体的请求,但我想知道是否有人有解决这个特殊问题的办法。当图形包括颜色条时,似乎Matplotlib试图将颜色条和图形本身挤入一个正方形的边界框中。有没有一种方法可以保持所需维度的图形本身(理想的纵横比为1),同时仍然具有颜色条?有没有巧妙的方法来做到这一点,以便您不必猜测和检查?
以下是代码:
plt.figure(figsize=(8,8))
props = dict(boxstyle='round', facecolor='#C0C0C0', alpha=1)
plt.hexbin(p_binned[7],q_binned[7],extent=(0,1,0,1),gridsize=50,cmap='bone')
plt.colorbar()
text_content = "{:1.3f} ".format(bins[7]/r200_MediumMass2)
plt.text(0.05, 0.95, text_content + r"$r/r_{200}$", fontsize=16, verticalalignment='top', bbox=props)
plt.xlabel('p')
plt.ylabel('q',rotation='horizontal')
plt.ylim(0,1)
plt.xlim(0,1)
plt.show()

谢谢!


最好发布能够重现您问题的示例代码。 - tacaswell
添加了重现我的问题的代码。 - astromax
1个回答

7
你可以通过以下方式强制设置轴的纵横比为1:
ax.set_aspect('equal')

并且可以将图形重新调整为您想要的任何尺寸(以英寸为单位)

fig.set_size_inches([height, width],forward=True)

您可以使用

art.get_window_extent()

要以显示单位获取任何艺术家的大小,您可以使用此方法来编程重新调整大小。

除此之外,mpl还应该如何添加colorbar?


有没有一种方法可以在不创建fig和ax实例的情况下实现相同的结果?(即 - 如上所示的代码方式) - astromax
啊 - 我想通了:axes().set_aspect('equal')。 - astromax
1
@astromax 请查看这个答案:https://dev59.com/8GYq5IYBdhLWcg3wui0z#14261698。你已经创建了`fig`和`ax`对象,只是`plt`将它们隐藏了。 - tacaswell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接