matplotlib 如何使用twinx和仍然得到平方图

kuarbcqp  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(125)

如何显示一个具有两个轴的图,使得顶部轴和右侧轴的纵横方向是“相等的”。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.plot([0,1],[0,1])

但是一旦使用twinx函数,这种情况就会改变。

ax2 = ax.twinx()
ax2.set_ylim([0,2])
ax3 = ax.twiny()
ax3.set_xlim([0,2])

在ax2和ax3上使用set_aspect('equal')似乎强制它成为ax的方面,但set_aspect(0.5)似乎也没有改变任何东西。
简单地说,我希望图是正方形的,底部和左边的轴从0到1,顶部和右边的轴从0到2。
你能在两个轴之间设置纵横比吗?我试过堆叠轴:

ax3 = ax2.twiny()
ax3.set_aspect('equal')

我还尝试在set_aspect中使用adjustable关键字:

ax.set_aspect('equal', adjustable:'box-forced')

我能得到的最接近的答案是:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_aspect('equal', adjustable='box-forced')
ax.plot([0,1],[0,1])
ax2=ax.twinx()
ax3 = ax2.twiny()
ax3.set_aspect(1, adjustable='box-forced')
ax2.set_ylim([0,2])
ax3.set_xlim([0,2])
ax.set_xlim([0,1])
ax.set_ylim([0,1])

它产生:

我想删除额外的空间,以右边和左边的情节

o2g1uqev

o2g1uqev1#

使用两个不同的双轴来获得两组独立的轴似乎过于复杂。如果目标是创建一个正方形图,图的每一侧都有一个轴,您可以使用两个axes,两者都在相同的位置,但比例不同。然后可以将两者设置为具有相等的长宽比。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.plot([0,1],[0,1])

ax2 = fig.add_axes(ax.get_position())
ax2.set_facecolor("None")
ax2.set_aspect('equal')
ax2.plot([2,0],[0,2], color="red")
ax2.tick_params(bottom=0, top=1, left=0, right=1, 
                labelbottom=0, labeltop=1, labelleft=0, labelright=1)

plt.show()

oogrdqng

oogrdqng2#

更新给那些在2023年寻找正方形地块面积的人,他们在set_aspect,equal,datalim和adjustables上没有太多的运气:
您可以直接设置框方面:

ax.set_box_aspect(1)

这对我的孪生轴和对数图都有效,其中ax.set_aspect('equal', 'box')失败是因为孪生轴上不允许它,而ax.set_aspect('equal', 'datalim')失败是因为NaN或INF限制(可能是由于半逻辑规模)
(In在这种特殊情况下,你可能必须分别为ax和ax2做这件事)

相关问题