gpt4 book ai didi

Matplotlib Axis 具有两个比例共享原点

转载 作者:行者123 更新时间:2023-12-03 07:02:35 24 4
gpt4 key购买 nike

我需要在 Matplotlib 中两个叠加两个具有不同 Y Axis 比例的数据集。数据包含正值和负值。我希望两个轴共享一个原点,但 Matplotlib 默认情况下不会对齐两个比例。

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

ax1.bar(range(6), (2, -2, 1, 0, 0, 0))
ax2.plot(range(6), (0, 2, 8, -2, 0, 0))
plt.show()

我想可以使用 .get_ylim().set_ylim() 来执行一些计算,并对齐两个比例。有更简单的解决方案吗?

Output from the sample above

最佳答案

使用align_yaxis()函数:

import numpy as np
import matplotlib.pyplot as plt

def align_yaxis(ax1, v1, ax2, v2):
"""adjust ax2 ylimit so that v2 in ax2 is aligned to v1 in ax1"""
_, y1 = ax1.transData.transform((0, v1))
_, y2 = ax2.transData.transform((0, v2))
inv = ax2.transData.inverted()
_, dy = inv.transform((0, 0)) - inv.transform((0, y1-y2))
miny, maxy = ax2.get_ylim()
ax2.set_ylim(miny+dy, maxy+dy)


fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

ax1.bar(range(6), (2, -2, 1, 0, 0, 0))
ax2.plot(range(6), (0, 2, 8, -2, 0, 0))

align_yaxis(ax1, 0, ax2, 0)
plt.show()

enter image description here

关于Matplotlib Axis 具有两个比例共享原点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10481990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com