Python 如何确保绘图的x轴和y轴大小相等?

Python 如何确保绘图的x轴和y轴大小相等?,python,python-2.7,matplotlib,Python,Python 2.7,Matplotlib,我想使x和y轴的长度相等(即减去图例的绘图应为正方形)。我希望在外面绘制图例(我已经能够将图例放在盒子外面)。数据中x轴的跨度(x\u max-x\u min)与数据中y轴的跨度(y\u max-y\u min)不同 这是我目前拥有的代码的相关部分: plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=15 ) plt.axis('equal') plt.tight_layout() 以下链接是我获得的输出图的示例:

我想使
x
y
轴的长度相等(即减去图例的绘图应为正方形)。我希望在外面绘制图例(我已经能够将图例放在盒子外面)。数据中
x轴的跨度(
x\u max-x\u min
)与数据中
y轴的跨度(
y\u max-y\u min
)不同

这是我目前拥有的代码的相关部分:

plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=15 )
plt.axis('equal')
plt.tight_layout()
以下链接是我获得的输出图的示例:


如何做到这一点?

假设您知道数据集的大小,您必须手动设置限制

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])
更好的选择是遍历数据以找到最大x坐标和y坐标,取这两个数字中的较大值,再向该值添加一点作为缓冲区,然后将
xmax
ymax
设置为该新值。您可以使用类似的方法设置
xmin
ymin
:不求最大值,而是求最小值

为了把图例放在绘图之外,我会看这个问题:

你想要的是
plt.axis('scaled')
?如果数据限值相差相等,则会生成一个方形图

如果不是,则可以通过将轴的纵横比设置为xlimits和ylimits的比率来获得方形图

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1,2)

ax1.plot([-2.5, 2.5], [-4,13], "s-")
ax1.axis("scaled")

ax2.plot([-2.5, 2.5], [-4,13], "s-")
ax2.set_aspect(np.diff(ax2.get_xlim())/np.diff(ax2.get_ylim()))

plt.show()

我已经能够将图例放在框外(图中也显示了同样的内容)。数据中
x轴的跨度(
x\u max-
x\u min)与数据中
y轴的跨度(
y\u max-
y\u min)不同。我唯一想做的就是使x轴和y轴的长度相等(即图中减去图例的部分应该是正方形)。除非我误解了什么,否则我认为你应该能够做到我上面描述的。如果不行就告诉我尼古拉斯:谢谢你的帮助。我真的很感激。不幸的是,它似乎不起作用。我试过你的建议。这就是我尝试过的:plt.legend(loc='中左',bbox_to_anchor=(1,0.5),fontsize=15)axes=plt.gca()xmin=np.min(XX[:,0])xmax=np.max(XX[:,0])ymin=np min(XX[:,1])ymaxs=np max(XX[:,1])axs.setxlimaxs([xmin,xmax ax ax.setylim谢谢你的回答。如果传说不在情节范围内,这有关系吗?我希望没有图例的部分是正方形(我希望除了这个正方形之外还有图例)。在我的例子中,数据限制的差异并不相等。如果在绘图旁边有另一个子绘图或图例,那么这应该无关紧要。我会说试试看,看看你对结果是否满意,否则回来解释任何进一步的问题。谢谢你的回答。我试过了。这是可行的,但有一个问题-绘图的侧面被切割(这是我使用的
plt.tight\u layout()
。这是我使用上述建议后得到的绘图。()我怎么能不切割图形的侧面呢?这不应该发生。在设置方面之前,你调用了tight_布局吗?在设置方面之后,我调用了tight_布局。我没有子绘图,所以我尝试了基于你建议的此方法。这是我在代码的相关部分中所做的:第1行:
axes=plt.gca()
,第二行:
axes.set\u aspect(np.diff(axes.get\u xlim())/np.diff(axes.get\u ylim())
,第三行:
plt.tight\u layou()
,第四行:
plt.savefig('filename.png')