如何在Python的Matplotlib中获取次要刻度(minor ticks)的数据?
获取Matplotlib图表中次要刻度(Minor Ticks)的数据
要获取图表里次要刻度的位置和标签数据,直接用Matplotlib轴对象的两个方法就能实现:
获取次要刻度的位置
调用轴对象的get_minorticklocs()方法,可直接拿到对应轴上所有次要刻度的数值位置。针对X轴和Y轴的示例代码如下:
# 获取X轴次要刻度位置 x_minor_locs = ax.xaxis.get_minorticklocs() # 获取Y轴次要刻度位置 y_minor_locs = ax.yaxis.get_minorticklocs() print("X轴次要刻度位置:", x_minor_locs) print("Y轴次要刻度位置:", y_minor_locs)
获取次要刻度的标签文本
如果要提取次要刻度显示的标签内容,先用get_minorticklabels()方法获取标签对象列表,再遍历每个对象调用.get_text()即可拿到文本内容:
# 获取X轴次要刻度标签文本 x_minor_labels = [label.get_text() for label in ax.xaxis.get_minorticklabels()] # 获取Y轴次要刻度标签文本 y_minor_labels = [label.get_text() for label in ax.yaxis.get_minorticklabels()] print("X轴次要刻度标签:", x_minor_labels) print("Y轴次要刻度标签:", y_minor_labels)
整合到你的代码中
把上述代码加到你原有代码的plt.show()之前即可,完整示例如下:
from matplotlib import pyplot as plt from matplotlib.ticker import MultipleLocator import numpy as np from numpy import random weeks = np.arange(1,11) cm = random.randint(10, size=(10)) plt.rcParams["figure.figsize"] = (15,10) fig, ax = plt.subplots() ax.grid(which='major', linestyle='-', linewidth='1', color='red') ax.set_ylabel("cm") ax.set_xlabel("weeks") ax.minorticks_on() plt.plot(weeks, cm) ax.xaxis.set_minor_locator(MultipleLocator(1 / 9)) ax.yaxis.set_minor_locator(MultipleLocator(1 / 9)) ax.xaxis.set_minor_formatter(lambda x, pos: '123456789'[int(round(x * 9)) % 9]) ax.yaxis.set_minor_formatter(lambda x, pos: '123456789'[int(round(x * 9)) % 9]) ax.tick_params(axis='x', which='minor', labelsize=5) ax.tick_params(axis='y', which='minor', labelsize=5) ax.grid(True, which='both') plt.xlim(1,10) plt.ylim(1,10) ax.yaxis.tick_right() ax.yaxis.tick_left() plt.plot(weeks, cm, marker='*', markersize=10, markeredgecolor='blue') print("Value of get_minorticklines() :", ax.xaxis.get_minorticklines()) plt.vlines(weeks, 0, cm, linestyle="solid") plt.hlines(cm, 0, weeks, linestyle="solid") # 新增:获取次要刻度数据 # 获取刻度位置 x_minor_locs = ax.xaxis.get_minorticklocs() y_minor_locs = ax.yaxis.get_minorticklocs() print("\nX轴次要刻度位置:", x_minor_locs) print("Y轴次要刻度位置:", y_minor_locs) # 获取刻度标签文本 x_minor_labels = [label.get_text() for label in ax.xaxis.get_minorticklabels()] y_minor_labels = [label.get_text() for label in ax.yaxis.get_minorticklabels()] print("\nX轴次要刻度标签:", x_minor_labels) print("Y轴次要刻度标签:", y_minor_labels) plt.show()
注:因为你设置了自定义的次要刻度格式化函数,所以标签文本会是你定义的'123456789'中的对应字符,而刻度位置则是根据MultipleLocator(1/9)生成的连续数值。
内容的提问来源于stack exchange,提问作者aparna podili
相关产品推荐
相关产品推荐

