在Matplotlib中,我需要两个覆盖两个不同Y轴刻度的数据集.数据包含正值和负值.我想要两个轴共享一个原点,但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)) ax2.plot(range(6),(0,2,8,0)) plt.show()
我想可以用.get_ylim()和.set_ylim()来执行一些计算.有更容易的解决方案吗?
解决方法
使用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),0)) align_yaxis(ax1,0) plt.show()