我需要在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, 0, 0))
ax2.plot(range(6), (0, 2, 8, -2, 0, 0))
plt.show()
我想可以用.get_ylim()
和.set_ylim()
两个对齐两个刻度来执行一些计算。有更简单的解决办法吗?
使用align_yaxis()函数:
为了确保y边界保持不变(因此没有数据点偏离绘图),为了平衡两个y轴的调整,我对@HYRY的答案做了一些补充:
@drevicko的答案在我绘制以下两个点序列时失败了:
。。。下面是我的版本:
原则上,有无限不同的可能性来对齐零(或其他值,另一个提供的解决方案接受这些值):只要将零放在y轴上,就可以缩放这两个序列中的每一个,使其适合。我们只是选择一个位置,这样在转换后,两个覆盖相同高度的垂直间隔。 或者换言之,与不对齐图相比,我们在相同因素下最小化它们。 (这并不意味着0位于图的一半:这将发生,例如,如果一个图全部为负,另一个图全部为正。)
Numpy版本:
相关问题 更多 >
编程相关推荐