Matplotlib 简明教程

Matplotlib - Tick Formatters

Understanding Ticks and Tick Labels

在一般图像和曲线图中,刻度线是显示 x 轴和 y 轴刻度的线,提供与每个刻度线相关的值的清晰表示。刻度标签是与每个轴上的每个刻度线相关联的文本或数值注释,提供与每个刻度线相关联的值的清晰表示。

以下图像表示图像中的刻度线和刻度标签 −

tick formatters input

在此上下文中 Tick formatters ,控制刻度标签的外观,指定如何显示刻度符号。此自定义可以包括格式化选项,如指定小数位数、添加单位、使用科学计数法或应用日期和时间格式。

Tick Formatters in Matplotlib

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

为了设置刻度格式,Matplotlib 允许您使用 −

  1. a format string,

  2. a function,

  3. 或者一个 Formatter subclass 实例。

Applying Tick Formatters

Matplotlib 通过 set_major_formatterset_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)

String Formatting

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

Example

在此示例中,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 ex1

Function Based Formatting

此方法提供了一种通过 user-defined 函数自定义刻度标签的灵活方式。该函数应接受两个输入:x(刻度值)和 pos(刻度在轴上的位置)。然后,它返回一个表示与给定输入相对应的所需刻度标签的字符串。

Example

此示例演示了使用函数格式化 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 ex2

Formatter Object Formatting

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

  1. NullFormatter - 此对象确保不显示刻度上的任何标签。

  2. StrMethodFormatter - 此对象利用字符串 str.format 方法来格式化刻度标签。

  3. FormatStrFormatter - 此对象使用 %-style 格式化来格式刻度标签。

  4. FuncFormatter - 它通过一个自定义函数来定义标签。

  5. FixedFormatter - 它允许用户显式设置标签字符串。

  6. ScalarFormatter - 它是标量的默认格式化程序。

  7. PercentFormatter - 它将标签格式化为百分比。

Example 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 ex3

Example 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 ex4