是否可以用两个独立的y轴绘制一张图,使刻度线对齐?
下面是解决方案的一半示例。我已经使用twinx
将y轴加倍,但是刻度线没有对齐,网格线在图中形成了一个尴尬的模式。有没有办法使刻度线共享相同的位置,但对应不同的y值?在下面的示例中,我希望左侧5的刻度线与右侧6的刻度线位于相同的垂直位置。
import numpy as np
a = np.random.normal(10, 3, size=20)
b = np.random.normal(20, 5, size=40)
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.hist(a)
ax2.hist(b)
本练习的主要要点是使两个轴的轴线重叠。
3条答案
按热度按时间plicqrtu1#
您需要手动设置
yticks
,因为它是自动计算的,从而导致变化。添加如下内容:其中,我们使用轴边界之间的5个点的数组设置
ytick
位置。因为你有一个直方图,你可以在每种情况下将下限设置为零,你可能希望上限稍微大一点,所以我会有给出一个图(为了清晰起见,颜色和透明度(alpha)发生了变化):
qxgroojn2#
我知道这是旧的,但这可能会帮助一些人在未来。
我基于上面的解决方案创建了一个函数,以确保标签最终不会变成含有大量小数的东西:
其使用方式如下:
输出:
ijxebb2r3#
在答案后面加上:对于那些在他们的情节中既有负值又有正值的人,我发现的解决方案如下:
这导致与零的对称轴距离,其中y轴上的零“线”对齐。
set_yticks
的困难在于它在min
和max
之间进行计算,而不是min
,0
,max
。