Matplotlib Y轴刻度非连续递增,如何设置从2起始至最大值?
解决Matplotlib Y轴刻度从2开始到最大值的问题
要实现Y轴刻度从2开始、到数据最大值且连续递增,你可以通过固定Y轴显示范围+合理设置刻度定位器来完成,以下是具体修改方案:
方案1:保留MaxNLocator自动适配刻度数量(推荐,避免重叠)
先从数据中提取Y轴最大值,固定Y轴下限为2,再用MaxNLocator控制刻度数量,确保刻度连续且不重叠:
import pandas as pd df = pd.DataFrame(data) print(df) #%% import matplotlib.pyplot as plt from matplotlib.ticker import MaxNLocator import numpy as np plt.scatter(df['time'], df['mag'], s=25, alpha=.3) plt.xlabel("Time") plt.ylabel("Magnitude") plt.xticks(df['time'], rotation=60) plt.gca().xaxis.set_major_locator(MaxNLocator(nbins=20)) # --- 修改Y轴刻度的核心代码 --- # 获取mag列的最大值 y_max = df['mag'].max() # 设置Y轴范围:从2开始到数据最大值 plt.ylim(bottom=2, top=y_max) # 用MaxNLocator自动生成合适数量的连续刻度,integer=True可强制整数刻度(根据你的数据选择) plt.gca().yaxis.set_major_locator(MaxNLocator(nbins=30, integer=False)) # --- --- plt.show()
方案2:固定刻度步长(比如每隔1个单位)
如果需要刻度按固定步长递增(比如每个刻度差1),可以用MultipleLocator替代MaxNLocator:
import pandas as pd df = pd.DataFrame(data) print(df) #%% import matplotlib.pyplot as plt from matplotlib.ticker import MaxNLocator, MultipleLocator import numpy as np plt.scatter(df['time'], df['mag'], s=25, alpha=.3) plt.xlabel("Time") plt.ylabel("Magnitude") plt.xticks(df['time'], rotation=60) plt.gca().xaxis.set_major_locator(MaxNLocator(nbins=20)) # --- 修改Y轴刻度的核心代码 --- y_max = df['mag'].max() plt.ylim(bottom=2, top=y_max) # 设置Y轴主刻度步长为1(可根据需求调整为0.5、2等) plt.gca().yaxis.set_major_locator(MultipleLocator(1)) # --- --- plt.show()
说明
plt.ylim(bottom=2, top=y_max)强制Y轴只显示2到最大值的范围,刻度会自动从这个区间内生成- 两种方案都能保证刻度连续递增,选哪种取决于你是否需要自动适配刻度数量(方案1)还是固定步长(方案2)
内容的提问来源于stack exchange,提问作者Doğukan Kılıç
相关产品推荐
相关产品推荐

