gpt4 book ai didi

python - 无法对齐 matplotlib twinx 轴的刻度

转载 作者:太空狗 更新时间:2023-10-29 22:10:26 40 4
gpt4 key购买 nike

我创建了一个具有 2 个 y 轴的 matplotlib 图。 y 轴具有不同的刻度,但我希望刻度线和网格对齐。我正在从 excel 文件中提取数据,因此无法事先知道最大限制。我尝试了以下代码。

# creates double-y axis
ax2 = ax1.twinx()

locs = ax1.yaxis.get_ticklocs()
ax2.set_yticks(locs)

现在的问题是 ax2 上的刻度不再有标签。谁能给我一个让刻度线与不同刻度对齐的好方法?

最佳答案

对齐两个不同刻度的刻度位置将意味着放弃漂亮的自动刻度定位器并将刻度设置为与原始轴相同的次轴位置。

想法是使用一个函数在两个轴刻度之间建立关系,并将第二个轴的刻度设置在第一个轴的位置。

enter image description here

import matplotlib.pyplot as plt
import matplotlib.ticker

fig, ax = plt.subplots()
# creates double-y axis
ax2 = ax.twinx()

ax.plot(range(5), [1,2,3,4,5])
ax2.plot(range(6), [13,17,14,13,16,12])
ax.grid()

l = ax.get_ylim()
l2 = ax2.get_ylim()
f = lambda x : l2[0]+(x-l[0])/(l[1]-l[0])*(l2[1]-l2[0])
ticks = f(ax.get_yticks())
ax2.yaxis.set_major_locator(matplotlib.ticker.FixedLocator(ticks))

plt.show()

请注意,这是针对一般情况的解决方案,它可能会导致标签完全不可读,具体取决于用例。如果您碰巧有更多关于轴范围的先验信息,可能会有更好的解决方案。

另见 this question对于牺牲第一个轴的自动刻度位置以更容易设置第二个轴刻度位置的情况。

关于python - 无法对齐 matplotlib twinx 轴的刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45037386/

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