我有以下代码。简而言之,我需要复制底部的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()
这很像这个问题(Changing axis without changing data (Python)),但是我使用一个常数(例如0到750)作为原始图,并且我要将xlim设置为的范围与原始数据无关(例如0到30000)。
答案 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()
还需要设置一些labelpad
(同样也没有明确的原因,除了关于从双轴创建双轴的含义外,可能其他人也没有)。