Matplotlib - 轴刻度
什么是轴刻度?
在 Matplotlib 库中,轴刻度指的是沿轴显示和间隔值的办法。Matplotlib 支持多种类型的刻度,这些刻度会影响数据在轴上的可视化和分布方式。
matplotlib 库中有几种常见的轴刻度,它们是:
Linear Scale(默认)
Logarithmic Scale
Symmetrical Logarithmic Scale (Symlog)
选择合适的轴刻度取决于数据性质和所需的视觉效果。选择能够有效表示数据并在图表中传达准确信息的刻度非常重要。
不同刻度的使用场景
Linear − 适用于显示值之间间距均匀的数据。
Logarithmic − 适用于表示幅度范围宽的数据。
Symmetrical Logarithmic − 适用于包含正值和负值且不排除零的数据集。
实现不同刻度
让我们详细了解每种刻度在图表中的实现方式。
线性刻度
在 Matplotlib 中,线性刻度表示用于绘制数据的标准线性坐标系。它是默认应用于 x 轴和 y 轴的缩放方式,除非另有指定。
线性刻度的特性
均匀间距 − 在线性刻度上,轴上的等增量表示数据中的等差异。例如,0 到 1 之间的距离与 1 到 2 之间的距离相同。
线性关系 − 在线性刻度上绘制的數據点遵循线性关系,即绘图点之间的变化与数据变化成比例。
示例 - 使用线性刻度
在这个示例中,x 轴和 y 轴默认使用线性刻度。轴上的每个单位表示数据中的恒定增量。
import matplotlib.pyplot as plt
# 示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 创建带有线性刻度(默认)的图表
plt.plot(x, y)
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('线性刻度图表')
plt.show()
输出
对数刻度
在 Matplotlib 中,我们可以使用 plt.xscale() 和 plt.yscale() 函数,或者在使用轴对象 ax 时使用对应的方法 ax.set_xscale() 和 ax.set_yscale(),为轴设置对数刻度。这些函数允许我们将轴的刻度更改为对数刻度。
语法
以下是将 x 轴更改为对数刻度的语法,使用 plt.xscale() −
plt.xscale('log')
ax.set_xscale()
ax.set_xscale('log')
以下是将 y 轴更改为对数刻度的语法,使用 plt.yscale() −
plt.yscale('log')
使用 ax.set_yscale()
ax.set_yscale('log')
示例 - 使用对数刻度
这是一个演示如何为 x 轴和 y 轴设置对数刻度的示例
import matplotlib.pyplot as plt
# 示例数据
x = [1, 2, 3, 4, 5]
y = [10, 100, 1000, 10000, 100000]
# 创建带有两个轴的对数刻度的图表
plt.plot(x, y)
# 为 x 轴和 y 轴设置对数刻度
plt.xscale('log')
plt.yscale('log')
plt.xlabel('X轴 (对数刻度)')
plt.ylabel('Y轴 (对数刻度)')
plt.title('对数刻度图表')
plt.show()
输出
对称对数刻度 (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) # 为 y 轴应用对称对数刻度
plt.title('对称对数刻度图表')
plt.show()
输出
使用不同刻度的图表
在这个示例中,我们使用 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('时间 (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()
输出
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()
输出
