如何在Matplotlib中添加仅靠数组索引关联的次X轴?
Matplotlib实现索引关联的次X轴对齐问题
问题描述
现有数据:
x1 = [1,2,3,4,5,6,7,8,9,10]; x2 = [1,3,10,60,500,10000,70000,500000,1000000,10000000]; y =[1,2,3,4,5,6,7,8,9,10]
需在Matplotlib中绘制以(x1,y)为主图的图表,并添加x2作为次X轴。x1与x2仅通过数组索引关联,无转换函数,无法使用secondary_xaxis方法。
尝试以下代码后,次X轴刻度未与主X轴对齐(表现为次轴刻度随机分布,未和主轴1-10的刻度一一对应):
self.x = [1,2,3,4,5,6,7,8,9,10] self.y = [1,2,3,4,5,6,7,8,9,10] x2 = [1,3,10,60,500,10000,70000,500000,1000000,10000000] ax3 = ax.twiny() ax.plot(self.x,self.y) ax3.set_xticks(x2) plt.show()
正确实现方法
核心思路是让次X轴的刻度位置与主X轴的刻度位置完全一致,仅替换刻度显示的标签内容为x2的对应值,具体代码如下:
import matplotlib.pyplot as plt x1 = [1,2,3,4,5,6,7,8,9,10] y = [1,2,3,4,5,6,7,8,9,10] x2 = [1,3,10,60,500,10000,70000,500000,1000000,10000000] # 创建画布和主轴 fig, ax = plt.subplots() # 绘制主图 ax.plot(x1, y) # 创建次X轴 ax2 = ax.twiny() # 设置次轴刻度位置为主轴的x1数值(保证位置对齐) ax2.set_xticks(x1) # 将次轴刻度标签替换为x2的对应值 ax2.set_xticklabels(x2) # 可选:添加轴标签,提升可读性 ax.set_xlabel('主X轴(x1)') ax2.set_xlabel('次X轴(x2)') ax.set_ylabel('Y轴') plt.show()
该方法利用set_xticks()指定次轴刻度的位置与主轴一致,再通过set_xticklabels()替换显示内容,完美实现索引关联的次轴对齐需求。
内容的提问来源于stack exchange,提问作者Aidan O'Farrell
相关产品推荐
相关产品推荐

