Matplotlib 简明教程

Matplotlib - Axis Ticks

What are Axis Ticks?

Matplotlib 中的轴刻度标记是指沿轴的标记,它们表示特定的数据值。它们有助于理解绘图的范围,并为数据可视化提供参考点。让我们深入了解轴刻度标记的详细信息 −

Key Concepts in Axis ticks

以下是由轴刻度标记提供的关键概念。

Major Ticks − 这些是沿轴的突出刻度,表示显著的数据值。

Minor Ticks − 这些是主要刻度之间的较小刻度,它们在刻度上提供了更精细的粒度,但通常不太突出。

Customizing Axis Ticks

根据需要和需求,可以自定义图上轴刻度线。自定义需要执行以下步骤。

Setting Ticks

可以用两种方法设置轴刻度线,一种是手动设置,另一种是自动调整。

Manual Setting

可以使用 plt.xticks()plt.yticks() 函数为轴设置特定刻度线位置和标签。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Plot with Custom Axis Ticks')
# Customize x-axis ticks
plt.xticks([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'])
# Customize y-axis ticks and labels
plt.yticks([-1, 0, 1], ['Min', 'Zero', 'Max'])
plt.show()
manual setting

Automatic Adjustment

在 Matplotlib 中,轴刻度线的自动调整涉及让程序库根据数据范围确定刻度线的标注和位置。当我们创建图形时,此进程默认处理,但我们可以使用各种格式化选项或调整定位器和格式设置来微调自动调整。以下是一些与轴刻度线自动调整相关的要点。

在此示例中,Matplotlib 根据数据范围自动调整刻度线的标注和位置。

import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# Creating a plot (automatic adjustment of ticks)
plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Automatic Adjustment of Axis Ticks')
plt.show()
frequency

Customizing Automatic Adjustment

我们可以使用 pyplot 中的一些函数自动自定义标注。可以针对我们数据的特性进行调整,以增强图形的可读性。

理解和利用轴刻度线的自动调整对于在 Matplotlib 中创建清晰且具有信息性的可视化至关重要。

Adjusting the Number of Ticks

我们可以使用 plt.locator_params(axis='x', nbins=5) 控件 x 轴上的刻度线数。调整设置为所需数字的参数 nbins

Scientific Notation

要以科学计数法显示刻度线标签,我们可以使用 plt.ticklabel_format(style='sci', axis='both', scilimits=(min, max))

Date Ticks (For Time Series Data)

如果我们正在处理日期/时间数据,那么 Matplotlib 可以自动格式化日期刻度线。

在此示例中,我们将应用自定义自动调整到图形的轴刻度线。

import matplotlib.dates as mdates
from datetime import datetime
# Example date data
dates = [datetime(2022, 1, 1), datetime(2022, 2, 1), datetime(2022, 3, 1)]
# Creating a plot with automatic adjustment of date ticks
plt.plot(dates, [2, 4, 6])
# Formatting x-axis as date
plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xlabel('Date')
plt.ylabel('Y-axis')
plt.title('Automatic Adjustment of Date Ticks')
plt.show()
automatic customization

Tick Formatting

我们可以使用 fontsize, colorrotation 参数基于字体大小、颜色和旋转自定义刻度线标签的外观。

Example

import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# Creating a plot (automatic adjustment of ticks)
plt.plot(x, y)
plt.xticks(fontsize=10, color='red', rotation=45)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Automatic Adjustment of Axis Ticks')
plt.show()
tick format

Tick Frequency and Appearance

Setting Tick Frequency

我们可以使用 plt.locator_params(axis='x', nbins=5) 调整刻度线的频率,以控制显示的刻度线数。

import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# Creating a plot (automatic adjustment of ticks)
plt.plot(x, y)
plt.locator_params(axis='x', nbins=10)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Automatic Adjustment of Axis Ticks')
plt.show()
automatic adjustment default

Minor Ticks

我们可以使用 plt.minorticks_on() 启用次要刻度线。我们可以使用 plt.minorticks_on(), plt.minorticks_off() 自行定制它们的外观或指定它们的位置。

Example

import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# Creating a plot (automatic adjustment of ticks)
plt.plot(x, y)
plt.minorticks_on()
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Automatic Adjustment of Axis Ticks')
plt.show()
minor ticks

Use Cases

Precision Control - 调整刻度线以提供有关数据值更精确的信息。

Enhanced Readability - 自行定制刻度线标签和外观,增强可读性。

Fine-tuning - 手动设置刻度线以强调特定数据点或区间。

了解和自定义轴刻度线对于在图形中有效传递信息至关重要,因为它允许我们根据可视化需要调整数据展示。

Adding extra axis ticks

在此示例中,为了添加其他刻度线,我们使用 xticks() 函数,并将刻度线的范围从 1 到 10 增加到 1 到 20。

Example

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(1, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xticks(range(1, 20))
plt.show()
extra ticks

Customize X-axis ticks

在此示例中,为了添加其他刻度线,我们使用 xticks() 函数,并将刻度线的范围从 1 到 10 增加到 1 到 20。

Example

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
height = [3, 12, 5, 18, 45]
bars = ('A', 'B', 'C', 'D', 'E')
y_pos = np.arange(len(bars))
plt.bar(y_pos, height, color='yellow')
plt.tick_params(axis='x', colors='red', direction='out', length=7, width=2)
plt.show()
customize xticks

Remove the X-axis ticks while keeping the grids

要删除 X 刻度线同时保留网格,我们可以使用以下代码作为参考。

Example

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(0, 2*np.pi, 100)
ax = plt.gca()
ax.plot(x, np.sin(x), c='r', lw=5, label='y=sin(x)')
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.grid(True)
plt.legend(loc="upper right")
plt.show()
remove ticks

Turn off the ticks and marks

在此示例中,我们关闭 matplotlib 坐标轴的刻度线和标记,我们可以使用 set_tick_params() 隐藏 X 和 Y 坐标轴标记,set_xticks() 和 set_yticks() 隐藏 X 和 Y 坐标轴刻度线标记。

Example

import numpy as np
from matplotlib import pyplot as plt
# Set the figure size
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# Create x and y data points
x = np.linspace(-10, 10, 100)
y = np.sin(x)
plt.plot(x, y)
ax = plt.gca()
# Hide X and Y axes label marks
ax.xaxis.set_tick_params(labelbottom=False)
ax.yaxis.set_tick_params(labelleft=False)
# Hide X and Y axes tick marks
ax.set_xticks([])
ax.set_yticks([])
plt.show()
remove ticks markers

Remove the digits after the decimal point in axis ticks

在此示例中,我们使用 x.astype(int) 函数仅将刻度线标记设置为数字。

Example

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.array([1.110, 2.110, 4.110, 5.901, 6.00, 7.90, 8.90])
y = np.array([2.110, 1.110, 3.110, 9.00, 4.001, 2.095, 5.890])
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xticks(x.astype(int))
plt.show()
decimal

Add Matplotlib Colorbar Ticks

在此示例中,我们为一个 ScalarMappable 实例 mappable 创建一个颜色轴,其中参数 ticks=ticks 用于添加颜色轴刻度线。

Example

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x, y = np.mgrid[-1:1:100j, -1:1:100j]
z = (x + y) * np.exp(-5.0 * (x ** 2 + y ** 2))
plt.imshow(z, extent=[-1, 1, -1, 1])
ticks = np.linspace(z.min(), z.max(), 5, endpoint=True)
cb = plt.colorbar(ticks=ticks)
plt.show()
color bar ticks

Adjusting gridlines and ticks in Matplotlib imshow

在此示例中,我们使用 set_xticklabels 和 set_yticklabels 方法设置 x 刻度线标签和 y 刻度线标签。

Example

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
data = np.random.rand(9, 9)
plt.imshow(data, interpolation="nearest")
ax = plt.gca()
ax.set_xticks(np.arange(-.5, 9, 1))
ax.set_yticks(np.arange(-.5, 9, 1))
ax.set_xticklabels(np.arange(0, 10, 1))
ax.set_yticklabels(np.arange(0, 10, 1))
ax.grid(color='red', linestyle='-.', linewidth=1)
plt.show()
adjusting gridlines

Change the spacing between ticks

在此示例中,我们在固定的位置上设置刻度线或改变 matplotlib 刻度线之间的间距。

Example

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
xtick_loc = [0.20, 0.75, 0.30]
ytick_loc = [0.12, 0.80, 0.76]
ax.set_xticks(xtick_loc)
ax.set_yticks(ytick_loc)
plt.show()
spacing ticks

Move the Y-axis ticks from the left side of the plot to the right side

在此示例中,要将 Y 坐标轴刻度线从左向右移动,我们使用 ax.yaxis.tick_right()。

Example

from matplotlib import pyplot as plt
import numpy as np
f = plt.figure()
ax = f.add_subplot(111)
ax.yaxis.tick_right()
xpoints = np.array([0, 5])
ypoints = np.array([0, 5])
plt.plot(xpoints, ypoints)
plt.ylabel("Y-axis ")
plt.xlabel("X-axis ")
plt.show()
yticks right

Add third level of ticks

此示例是添加第三级刻度线的参考。

Example

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
t = np.arange(0.0, 100.0, 0.1)
s = np.sin(0.1 * np.pi * t) * np.exp(-t * 0.01)
fig, ax = plt.subplots()
plt.plot(t, s)
ax1 = ax.twiny()
ax1.plot(t, s)
ax1.xaxis.set_ticks_position('bottom')
majors = np.linspace(0, 100, 6)
minors = np.linspace(0, 100, 11)
thirds = np.linspace(0, 100, 101)
ax.xaxis.set_major_locator(matplotlib.ticker.FixedLocator(majors))
ax.xaxis.set_minor_locator(matplotlib.ticker.FixedLocator(minors))
ax1.xaxis.set_major_locator(matplotlib.ticker.FixedLocator([]))
ax1.xaxis.set_minor_locator(matplotlib.ticker.FixedLocator(thirds))
ax1.tick_params(which='minor', length=2)
ax.tick_params(which='minor', length=4)
ax.tick_params(which='major', length=6)
ax.grid(which='both', axis='x', linestyle='--')
plt.axhline(color='gray')
plt.show()
third level

Create minor ticks for a polar plot

此示例是添加第三级刻度线的参考。

Example

import numpy as np
import matplotlib.pyplot as plt
# Set the figure size
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# radius and theta for the polar plot
r = np.arange(0, 5, 0.1)
theta = 2 * np.pi * r
# Add a subplot
ax = plt.subplot(111, projection='polar')
tick = [ax.get_rmax(), ax.get_rmax() * 0.97]
# Iterate the points between 0 to 360 with step=10
for t in np.deg2rad(np.arange(0, 360, 10)):
   ax.plot([t, t], tick, lw=1, color="red")
# Display the plot
plt.show()
polar minor

Overlapping Y-axis tick label and X-axis tick label

在此示例中,我们减少了 matplotlib 中 x 和 y 刻度线标签重叠的机会。

Example

import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
import numpy as np
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
xs = np.linspace(0, 5, 10)
ys = np.linspace(0, 5, 10)
plt.subplot(121)
plt.margins(x=0, y=0)
plt.plot(xs, ys)
plt.title("Overlapping")
plt.subplot(122)
plt.margins(x=0, y=0)
plt.plot(xs, ys)
plt.title("Non overlapping")
plt.gca().xaxis.set_major_locator(MaxNLocator(prune='lower'))
plt.gca().yaxis.set_major_locator(MaxNLocator(prune='lower'))
plt.show()
overlaping

Disable the minor ticks of a log-plot

此示例通过使用 minorticks_off() 函数禁用 matplotlib 中对数图的次要刻度线。

Example

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.random.randint(-3, 3, 10)
y = np.exp(x)
plt.subplot(121)
plt.plot(y, x, c='red')
plt.xscale('log')
plt.title("With minor ticks")
plt.subplot(122)
plt.plot(y, x, c='green')
plt.xscale('log')
plt.minorticks_off()
plt.title("Without minor ticks")
plt.show()
disable minorticks