Matplotlib - 刻度格式化器



理解刻度和刻度标签

一般来说,在图表和绘图中,刻度是显示x轴和y轴比例尺的小短线,清晰地表示每个刻度关联的值。刻度标签是与轴上每个刻度关联的文本或数字注释,清晰地表示每个刻度关联的值。

下图显示了图表上的刻度和刻度标签:

Tick Formatters Input Image

在此背景下,**刻度格式化器**控制刻度标签的外观,指定刻度标记的显示方式。此自定义可以包括格式选项,例如指定小数位数、添加单位、使用科学计数法或应用日期和时间格式。

Matplotlib中的刻度格式化器

Matplotlib允许用户通过**matplotlib.ticker**模块自定义刻度属性,包括位置和标签。此模块包含用于配置刻度定位和格式化的类。它提供了一系列通用的刻度定位器和格式化器,以及特定领域的自定义刻度定位器和格式化器。

要设置刻度格式,Matplotlib允许您使用:

  • 一个**格式字符串**,
  • 一个**函数**,
  • 或一个**Formatter子类**的实例。

应用刻度格式化器

Matplotlib提供了一种直接的方法来使用set_major_formatter和set_minor_formatter函数配置刻度格式化器。这些函数使您可以为特定轴设置主刻度和次刻度标签格式。

语法如下:

语法

ax.xaxis.set_major_formatter(xmajor_formatter)
ax.xaxis.set_minor_formatter(xminor_formatter)
ax.yaxis.set_major_formatter(ymajor_formatter)
ax.yaxis.set_minor_formatter(yminor_formatter)

字符串格式化

字符串格式化是一种技术,它隐式地创建StrMethodFormatter方法,允许您使用新式格式字符串(str.format)。

示例

在这个示例中,x轴刻度标签将使用字符串进行格式化。

import matplotlib.pyplot as plt
from matplotlib import ticker

# Create a sample plot
fig, ax = plt.subplots(figsize=(7,4))
ax.plot([1, 2, 3, 4], [10, 20, 15, 20])

# Set up the major formatter for the x-axis
ax.xaxis.set_major_formatter('{x} km')
ax.set_title('String Formatting')
plt.show()

输出

执行上述代码后,我们将得到以下输出:

Tick Formatters Example 1

基于函数的格式化

这种方法提供了一种灵活的方式,可以使用**用户定义**函数自定义刻度标签。该函数应接受两个输入:x(刻度值)和pos(轴上刻度的位置)。然后它返回一个字符串,表示与给定输入对应的所需刻度标签。

示例

此示例演示了如何使用函数格式化x轴刻度标签。

from matplotlib.ticker import FuncFormatter
from matplotlib import pyplot as plt

def format_tick_labels(x, pos):
   return '{0:.2f}%'.format(x)

# sample data
values = range(20)

# Create a plot
f, ax = plt.subplots(figsize=(7,4))
ax.plot(values)

# Set up the major formatter for the x-axis using a function
ax.xaxis.set_major_formatter(FuncFormatter(format_tick_labels))
ax.set_title('Function Based Formatting')
plt.show()

输出

执行上述代码后,我们将得到以下输出:

Tick Formatters Example 2

格式化器对象格式化

格式化器对象格式化允许使用特定的格式化器子类高级自定义刻度标签。一些常见的Formatter子类包括:

  • **NullFormatter** - 此对象确保刻度上不显示任何标签。
  • **StrMethodFormatter** - 此对象使用字符串str.format方法格式化刻度标签。
  • **FormatStrFormatter** - 此对象使用%-style格式化刻度标签。
  • **FuncFormatter** - 它通过自定义函数定义标签。
  • **FixedFormatter** - 它允许用户显式设置标签字符串。
  • **ScalarFormatter** - 它是标量的默认格式化器。
  • **PercentFormatter** - 它将标签格式化为百分比。

示例1

以下示例演示了如何将不同的Formatter对象应用于x轴,以在刻度标签上实现不同的格式化效果。

from matplotlib import ticker
from matplotlib import pyplot as plt

# Create a plot
fig, axs = plt.subplots(5, 1, figsize=(7, 5))
fig.suptitle('Formatter Object Formatting', fontsize=16)

# Set up the formatter 
axs[0].xaxis.set_major_formatter(ticker.NullFormatter())
axs[0].set_title('NullFormatter()')

# Add other formatters 
axs[1].xaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.3f}"))
axs[1].set_title('StrMethodFormatter("{x:.3f}")')

axs[2].xaxis.set_major_formatter(ticker.FormatStrFormatter("#%d"))
axs[2].set_title('FormatStrFormatter("#%d")')

axs[3].xaxis.set_major_formatter(ticker.ScalarFormatter(useMathText=True))
axs[3].set_title('ScalarFormatter(useMathText=True)')

axs[4].xaxis.set_major_formatter(ticker.PercentFormatter(xmax=5))
axs[4].set_title('PercentFormatter(xmax=5)')

plt.tight_layout()
plt.show()

输出

执行上述代码后,我们将得到以下输出:

Tick Formatters Example 3

示例2

此示例演示了如何使用字符串格式化方法(StrMethodFormatter)格式化x轴和y轴上的刻度标签,以显示带逗号分隔符的数字。

import matplotlib.pyplot as plt
from matplotlib.ticker import StrMethodFormatter

# Data
x = [10110, 20110, 40110, 6700]
y = [20110, 10110, 30110, 9700]

# Create plot
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y)

# Format tick labels for both x-axis and y-axis to include comma separators
ax.yaxis.set_major_formatter(StrMethodFormatter('{x:,}'))
ax.xaxis.set_major_formatter(StrMethodFormatter('{x:,}'))
# Show plot
plt.show()

输出

执行上述代码后,您将得到以下输出:

Tick Formatters Example 4
广告