我们在使用Matplotlib时,虽然Matplotlib默认的坐标轴定位器与格式生成器可以满足大部分需求,但是有时候为了使图片看起美观,我们需要手动去调整XY轴的刻度。

主要刻度与次要刻度,通过什么来设置?

每一个坐标轴都有主要刻度线与次要刻度线。主要刻度往往更大或更显著,而次要刻度往往更小。虽然一般情况下 Matplotlib 不会使用次要刻度。但是在处理对数的时候你会看到它们的身影。

import matplotlib.pyplot as pltplt.style.use('seaborn-whitegrid')import numpy as npax = plt.axes(xscale='log', yscale='log')




MPAndroidChart 设置Y轴刻度 y轴刻度怎么设置_坐标轴


通过上面的例子,我们发现每个主要刻度都显示为一个较大的刻度线和标签,而次要刻度都显示为一个较小的刻度线,且不显示标签。

但是我们可以通过设置每个坐标轴的formatter与locator对象,自定义这些刻度属性(包括刻度线的位置和标签)。

用print打印一下图形X轴的属性;

print(ax.xaxis.get_major_locator())print(ax.xaxis.get_minor_locator())print(ax.xaxis.get_major_formatter())print(ax.xaxis.get_minor_formatter())

通过打印出来的对象,很清楚的看到主要刻度标签和次要刻度标签的位置都是通过一个LogLocator对象设置的。次要刻度有一个NullFormatter对象处理标签,这样标签 就不会在图上显示了。

如何隐藏刻度与标签?

可以通过plt.NullLocator()与plt.NullFormatter()这两种方法实现。

ax = plt.axes()ax.plot(np.random.rand(50))ax.yaxis.set_major_locator(plt.NullLocator())ax.xaxis.set_major_formatter(plt.NullFormatter())


MPAndroidChart 设置Y轴刻度 y轴刻度怎么设置_数据可视化_02


通过上面的图表,我们发现,虽然移除了x轴的标签(但是保留了刻度线和网格线),以及y轴的刻度 (标签也一并被移除)。

如何增减刻度数量?

处理数据时,默认的刻度标签有一个问题,显示较小的图时,通常刻度看起来十分的拥挤。通过一个例子来展示一下。

fig, ax = plt.subplots(4, 4, sharex=True, sharey=True)


MPAndroidChart 设置Y轴刻度 y轴刻度怎么设置_设置y轴刻度_03


我们看到x轴数字几乎都重叠在一起,辨识起来非常困难。我们可以用 plt.MaxNLocator()来解决这个问题,通过它可以设置最多需要显示多少刻度。根据设置的最多刻度数量,Matplotlib 会自动为刻度安排恰当的位置。

# 为每个坐标轴设置主要刻度定位器 for axi in ax.flat: axi.xaxis.set_major_locator(plt.MaxNLocator(3)) axi.yaxis.set_major_locator(plt.MaxNLocator(3))fig


MPAndroidChart 设置Y轴刻度 y轴刻度怎么设置_设置y轴刻度_04


调节了图表的刻度后,对比上面的一张图看起来是不是很美观了不少?当我们数据可视化做的越多你会发现自定义刻度用起来比默认的要美观,虽然没有默认那么快捷。