Matplotlib - 坐标轴刻度



什么是坐标轴刻度?

在 Matplotlib 库中,坐标轴刻度指的是沿坐标轴显示和间隔值的方法。Matplotlib 支持各种类型的刻度,这些刻度会影响数据可视化和沿坐标轴分布的方式。

Matplotlib 库中存在不同的常用坐标轴刻度。它们是:

  • 线性刻度(默认)

  • 对数刻度

  • 对称对数刻度 (Symlog)

选择合适的坐标轴刻度取决于数据的性质和所需的视觉效果。选择有效表示数据的刻度以在图中传达准确信息非常重要。

不同刻度的用例

  • 线性 - 适用于显示值之间间隔均匀的数据。

  • 对数 - 用于表示涵盖广泛数量级的数据。

  • 对称对数 - 非常适合包含正值和负值且不排除零的数据集。

实现不同的刻度

让我们详细了解每种刻度如何在绘图中实现。

线性刻度

在 Matplotlib 中,线性刻度表示用于绘制数据的标准线性坐标系。它是应用于 x 轴和 y 轴的默认缩放比例,除非另有指定。

线性刻度的特征

均匀间隔 - 在线性刻度上,沿坐标轴的相等增量表示数据中的相等差异。例如,0 到 1 之间的距离与 1 到 2 之间的距离相同。

线性关系 - 绘制在线性刻度上的数据点遵循线性关系,其中绘制点的变化与数据的变化成正比。

示例

在此示例中,x 轴和 y 轴默认使用线性刻度。沿坐标轴的每个单位表示数据中的恒定增量。

import matplotlib.pyplot as plt
# Sample data
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# Creating a plot with linear scale (default)
plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Plot with Linear Scale')
plt.show()
输出
Axis Linear Scale

对数刻度

在 Matplotlib 中,我们可以使用plt.xscale()plt.yscale() 函数或在使用坐标轴对象ax时使用相应的ax.set_xscale()ax.set_yscale() 方法为坐标轴设置对数刻度。这些函数允许我们将坐标轴的刻度更改为对数。

语法

以下是使用plt.xscale() 将 x 轴更改为对数刻度的语法:

plt.xscale('log')

ax.set_xscale()

ax.set_xscale('log')

以下是使用plt.yscale() 将 y 轴更改为对数刻度的语法:

plt.yscale('log')

使用 ax.set_yscale()

ax.set_yscale('log')

示例

这是一个演示如何为 x 轴和 y 轴设置对数刻度的示例

import matplotlib.pyplot as plt
# Sample data
x = [1, 2, 3, 4, 5]
y = [10, 100, 1000, 10000, 100000]
# Creating a plot with logarithmic scale on both axes
plt.plot(x, y)
# Setting logarithmic scale for x-axis and y-axis
plt.xscale('log')
plt.yscale('log')
plt.xlabel('X-axis (Log Scale)')
plt.ylabel('Y-axis (Log Scale)')
plt.title('Logarithmic Scale Plot')
plt.show()
输出
Axis Logarithmic Scale

对称对数刻度 (Symlog)

在 Matplotlib 中,对称对数刻度通常称为symlog,它允许在对数刻度上绘制数据,同时也能对称地容纳零周围的正值和负值。

symlog 刻度结合了接近零的值的线性缩放和远离零的值的对数缩放。

语法

以下是为坐标轴设置对称对数刻度的语法:

对于 x 轴

plt.xscale('symlog', linthresh=base, linscale=lin_scale)

对于 y 轴

plt.yscale('symlog', linthresh=base, linscale=lin_scale)

其中:

  • linthresh - 线性阈值,确定线性行为和对数行为之间的转换位置。

  • base - 对数的底数(默认为 10)。

  • linscale - 接近零的线性范围的比例因子(默认为 1.0)。

示例

在此示例中,plt.yscale('symlog', linthresh=0.1) 将 y 轴设置为对称对数刻度,线性阈值 (linthresh) 为 0.1。接近零的值将线性显示,而远离零的值将遵循对数刻度。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10, 10, 500)
y = np.sinh(x)
plt.plot(x, y)
plt.yscale('symlog', linthresh=0.1)  # Applying symmetric logarithmic scale for y-axis
plt.title('Plot with Symmetric Logarithmic Scale')
plt.show()
输出
Axis Symmetric Log

使用不同刻度的绘图

在此示例中,我们使用 matplotlib 库绘制具有不同刻度的图。

示例

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)
fig, ax1 = plt.subplots()
color = 'red'

ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1, color=color)
ax1.tick_params(axis='y', labelcolor=color)
ax2 = ax1.twinx()

color = 'blue'
ax2.set_ylabel('sin', color=color)
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

plt.show()
输出
Different Scales

Matplotlib 中具有不同刻度的多个坐标轴

在此示例中,我们将了解如何创建共享 Y 轴。

示例

import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
ax1.plot([1, 2, 3, 4, 5], [3, 5, 7, 1, 9], color='red')
ax2 = ax1.twinx()
ax2.plot([11, 12, 31, 41, 15], [13, 51, 17, 11, 76], color='blue')
fig.tight_layout()
plt.show()
输出
Multipleaxes Scales
广告