我想在同一个轴对象上绘制不同尺度的数据。这意味着在同一个“轴”对象上有多个x轴和y轴(我知道有其他方法可以可视化多尺度数据,但我不想太详细地说明为什么我需要这样做!)。
我知道如何使用twinx
在同一个图上使用“Multiple Yaxis With Spines" matplotlib demo”获得多个y轴。然而,在这个例子中,所有数据共享同一个x轴。我想同时有多个y轴和多个x轴。每个有2个是微不足道的:我可以简单地使用twin_ax = ax.twinx().twiny()
。但是,如果我想要两个以上的x轴和y轴,我需要一种方法来偏移x轴和y轴的脊椎。问题是,如果我使用ax.twinx().twiny()
,我只能偏移顶部的脊椎,而不是正确的脊椎。如果我使用ax.twiny().twinx()
,那么它是反过来的。
下面是我的代码:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(constrained_layout=True)
twin1 = ax.twinx().twiny()
twin2 = ax.twinx().twiny()
twin2.spines.right.set_position(("axes", 1.2))
twin2.spines.top.set_position(("axes", 1.2))
plt.show()
似乎只有顶部的脊柱得到偏移,而不是正确的脊柱。如果我将顺序交换为twin2 = ax.twiny().twinx()
,那么只有正确的脊柱得到偏移,而不是正确的!如何解决这个问题?
1条答案
按热度按时间envsm3lx1#
ax.twinx()
从头开始创建一个新的轴ax2
*,叠加在ax
上。参见此处。在该方法的其余部分,您将看到
ax2
Y刻度被修改,因此它们显示在右侧。在这个
ax.twinx()
(即ax2
)的顶部,通过调用.twiny()
方法创建twin2
,该方法还创建了一个新的轴 * 从头开始 *,与其他轴叠加。这个新的
twin2
轴在右侧没有Y刻度(ax2
有),因此当您设置脊柱的位置时,它可以工作,但不显示刻度和标签。您可以在twins轴上使用以下函数来获得所需的结果
在您的代码中:
备注:
ax.twiny().twinx()
(交换机顺序)创建twin1
和twin2
,则此函数不再起作用。