Matplotlib使用twinx实现双Y轴时Y轴未增量缩放、绘图为直线问题
根因分析
该现象的核心原因是y1、y2变量存储的是字符串类型数据,而非数值型。Matplotlib处理字符串类数据做Y轴输入时,会将每个值视为独立分类标签按顺序排列,不会计算数值间隔生成增量刻度,最终所有点的Y轴间距完全一致,折线就会呈现为直线形态。
解决方法
按如下步骤调整即可:
- 先将
y1、y2转换为数值类型,修正刻度识别逻辑 - 若需要自定义Y轴刻度的增量步长,可调用
matplotlib.ticker模块的定位器实现
修正后代码
import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator # 转换数据为数值型,若原始为字符串格式必填 y1 = list(map(float, y1)) y2 = list(map(float, y2)) fig, ax1 = plt.subplots(figsize=(9,9)) ax2 = ax1.twinx() ax1.plot(x, y1, 'g') ax2.plot(x, y2, 'b') ax1.set_xlabel('Time') ax1.set_ylabel('Call OI', color='g') ax2.set_ylabel('Put OI', color='b') # 自定义Y轴增量步长,数值可根据实际数据范围调整 ax1.yaxis.set_major_locator(MultipleLocator(100)) ax2.yaxis.set_major_locator(MultipleLocator(100)) plt.show()
内容的提问来源于stack exchange,提问作者rbhlinux3
相关产品推荐
相关产品推荐

