y轴重复

时间:2018-07-19 22:34:57

标签: python matplotlib duplicates axes multiple-axes

我有以下代码。简而言之,我需要复制底部的x轴,以便保留已经绘制的数据(就位),但更改xlim。我在绘制数据后尝试了set_xlim(只是将数据重新调整为新的比例(如预期的那样);还尝试了复制轴(使用twiny),然后使用新的比例进行自定义(然后使用axvline添加线)。可以,但是标签现在不粘在轴上了!我以为我一定缺少什么。

有什么建议吗?

import matplotlib.pyplot as plt


plt.plot([1,2,1,4,5],[1,2,3,4,5], marker='o', label='value 1')
plt.plot([3,1,3,1,2],[1,2,3,4,5], label='value 2')

plt.gca().get_xaxis().set_visible(False)

ax1 = plt.twiny()
ax2 = ax1.twiny()


ax1.set_xlabel('TOP')
ax2.set_xlabel('BOTTOM')

plt.savefig(fname='test.png')

plt.show()

Labels not in correct place!

这很像这个问题(Changing axis without changing data (Python)),但是我使用一个常数(例如0到750)作为原始图,并且我要将xlim设置为的范围与原始数据无关(例如0到30000)。

1 个答案:

答案 0 :(得分:1)

ax1和ax2均为双轴。那些有他们的标签。 (这可能是意外的,确实可能是一个错误。)

使用多个轴时,直接使用pyplot很麻烦。相反,面向对象的方法更适合确保您设置要使用的对象的属性。

然后想到的是手动set_label_position将标签位置设置到底部。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1,2,1,4,5],[1,2,3,4,5], marker='o', label='value 1')
ax.plot([3,1,3,1,2],[1,2,3,4,5], label='value 2')

ax.get_xaxis().set_visible(False)

ax1 = ax.twiny()
ax2 = ax1.twiny()
ax2.xaxis.set_label_position('bottom') 

ax1.set_xlabel('TOP', labelpad=20)
ax2.set_xlabel('BOTTOM', labelpad=20)

plt.show()

enter image description here

还需要设置一些labelpad(同样也没有明确的原因,除了关于从双轴创建双轴的含义外,可能其他人也没有)。