You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Matplotlib指定的Y轴刻度按比例分布?

解决Matplotlib中Y轴刻度按比例分布的问题

你的Y轴数值跨度极大(从3到2400),直接用线性轴会导致小刻度密集堆积在底部,无法按比例展示指定的刻度列表。可以通过以下两种方法解决:

方法一:使用对数Y轴

对数轴适合数值呈倍数增长的场景,能让不同量级的刻度按比例分布:

import matplotlib.pyplot as plt
from datetime import datetime

x_axis = [datetime.strptime(date, "%d/%m/%y").date() for date in ['06/03/23', '13/03/23']]
y1 = [2400, 1900]
y2 = [1800, 1800]
y3 = [4, 3]

plt.plot(x_axis, y1, label="1")
plt.plot(x_axis, y2, label="2")
plt.plot(x_axis, y3, label="3")

plt.gcf().autofmt_xdate()
plt.xticks(x_axis)

# 启用对数Y轴
plt.yscale('log')
# 设置指定的刻度列表
yticks_list = [5,10,15,20,50,100,500,1000,1500,2000,2500]
# 显式设置刻度标签,确保显示指定数值
plt.yticks(yticks_list, labels=[str(tick) for tick in yticks_list])
# 添加网格辅助读数
plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.legend()
plt.show()

方法二:使用Symlog刻度(兼顾小数值与大数值)

如果需要在小数值区域保持线性展示,大数值区域用对数,可以用symlog刻度:

import matplotlib.pyplot as plt
from datetime import datetime

x_axis = [datetime.strptime(date, "%d/%m/%y").date() for date in ['06/03/23', '13/03/23']]
y1 = [2400, 1900]
y2 = [1800, 1800]
y3 = [4, 3]

plt.plot(x_axis, y1, label="1")
plt.plot(x_axis, y2, label="2")
plt.plot(x_axis, y3, label="3")

plt.gcf().autofmt_xdate()
plt.xticks(x_axis)

# 启用symlog刻度,linthresh设置线性区域阈值(小于10的部分线性展示)
plt.yscale('symlog', linthresh=10)
yticks_list = [5,10,15,20,50,100,500,1000,1500,2000,2500]
plt.yticks(yticks_list, labels=[str(tick) for tick in yticks_list])
plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.legend()
plt.show()

两种方法都能让你指定的刻度列表按比例分布在Y轴上,解决原图表中刻度堆积的问题。

内容的提问来源于stack exchange,提问作者bbasaran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:52:33