如何让matplotlib.pyplot的Y轴显示间隔标签并优化数值格式
解决Matplotlib Y轴标签密集与数值取整问题
针对Y轴标签过密、数值显示不友好的问题,可通过Matplotlib的ticker模块精准控制刻度数量和格式,以下是修改后的代码及说明:
关键修改点
- 导入刻度控制工具:从
matplotlib.ticker导入MaxNLocator和ScalarFormatter,前者用于控制刻度数量并强制整数,后者用于优化数值显示格式。 - 添加Y轴刻度配置:在绘图后设置Y轴的定位器和格式化器,减少刻度数量并确保数值为整数。
修改后的完整代码
from operator import itemgetter import pandas as pd import matplotlib.pyplot as plt import time from matplotlib.ticker import MaxNLocator, ScalarFormatter # 新增导入 def GraphBuilder(): item = 0 savenumber = 1 ColumnTime = itemgetter(0)(column_names) while item < col_count: SecondaryColumn = itemgetter(item)(column_names) ColumnTimeData = pandagraph[ColumnTime] SecondaryColumnData = pandagraph[(SecondaryColumn)] plt.xlim([0, 1000]) plt.ylim([-100, 100000]) plt.ylabel(SecondaryColumn) plt.plot(ColumnTimeData, SecondaryColumnData) plt.xticks(rotation = 45) # 新增Y轴配置:减少刻度数量+强制整数显示 ax = plt.gca() # 设置Y轴最多显示5个整数刻度(可根据需求调整nbins值) ax.yaxis.set_major_locator(MaxNLocator(integer=True, nbins=5)) # 关闭科学计数法,显示完整整数 formatter = ScalarFormatter(useMathText=False) formatter.set_scientific(False) ax.yaxis.set_major_formatter(formatter) print("Starting new graph") Start = time.time() plt.savefig(f"Graph{savenumber}.tiff") plt.close() print(f"Graph {savenumber} completed") End = time.time() TotalGraphTime = round(End - Start, 2) print("Graph completed in: ", TotalGraphTime, " Seconds.") time.sleep(0.1) item += 1 savenumber +=1
说明
MaxNLocator(integer=True, nbins=5):nbins控制Y轴显示的刻度总数,可根据图表大小调整(比如改成6、7);integer=True确保所有刻度都是整数。ScalarFormatter配合set_scientific(False):避免大数值被自动转换成科学计数法,保证显示完整的整数,提升可读性。- 原代码中的
plt.cla()和plt.clf()可去掉,因为plt.close()已经会清除当前图表,避免重复操作。
内容的提问来源于stack exchange,提问作者IPK9
相关产品推荐
相关产品推荐

