Matplotlib 简明教程
Matplotlib - Logarithmic Axes
What is Logarithmic axes?
Matplotlib 中的对数坐标轴允许使用对数刻度而不是线性刻度绘制一轴或两轴的图形。在处理跨越多个数量级的各种数据值时,这种刻度特别有用。我们可以使用对数刻度,它根据数量级表示相等间隔,而不是线性刻度,线性刻度将每个单位表示为相等。
现在,在了解线性坐标轴和对数坐标轴之间的对比之前,我们先了解一下线性坐标轴。
What is Linear Axes?
在绘制和制图的背景下,线性坐标轴是指标准的笛卡尔坐标系,其中坐标轴用线性或算术刻度表示。在这个系统中,我们有以下内容:
X-Axis and Y-Axis − 水平坐标轴通常是 x 坐标轴,它表示一个变量,而垂直坐标轴是 y 坐标轴,它表示另一个变量。
Equal Spacing − 沿每个轴的线性刻度表示所绘值的相等增量。例如在线性刻度中,0 到 1 之間の距离与 5 到 6 之间的距离相同。
Proportional Representation − 沿轴的每个单位直接对应于所表示值的单位变化。例如从 10 到 11 的移动表示与从 20 到 21 的移动相同的增加量。
Straight Lines − 在线性刻度上,变量之间的关系表示为直线。对于线性关系,连接时所绘数据点形成一条直线。
Applicability − 线性轴适合于可视化变量之间的关系是线性的数据,或者所表示的值在整个范围内变化不大。
Linear vs. Logarithmic Scales
线性刻度和对数刻度是不同的方式,可在绘图中表示轴上的数据,每种刻度都具有不同特性,适用于不同类型的数据分布和可视化。
Linear Axes |
Logarthmic Axes |
|
Scaling |
这使用线性定标;轴上每个值之间的距离是统一的,且表示所绘数量中的相等增量。 |
对数定标以数量级为基础表示值,而不是线性增量。轴上的每个刻度对应一个基值(例如 10 或 e)的幂。 |
Intervals |
沿着轴的单元直接对应数据值。例如在从 0 到 10 的线性刻度中,每个单元(例如从 0 到 1,1 到 2)表示 1 的相等增量。 |
在对数刻度中,沿着轴上的相等距离表示乘法因子,而不是加法因子。例如在从 1 到 100 的对数刻度中,这些距离可能表示 10 的幂(1、10、100)。 |
Representation |
线性轴通常用于数据,其中所绘点之间的关系最好由线性进展来描述。 |
对数轴适合于跨越多个数量级的 data,如指数增长或衰减。它们压缩大范围的值,使其在视觉上易于管理。 |
When to use |
通常用于数据,其显示变量之间的线性关系或跨越不宽范围的值的数据。 |
对于可视化跨越多个数量级的数据很有用,尤其是在处理指数增长或衰减、频率分布或集中在特定范围内的具有异常值数据时。 |
Plot |
Types of Logarithmic Scales
对数轴中有不同类型的对数刻度可用。我们一个一个来看。
Logarithmic X-axis
绘图中的对数 x 轴指的是一个 x 轴,其中刻度是对数的而不是线性的。这种定标通过使其适合可视化跨越多个数量级或沿 x 轴表现出指数行为的数据,将 x 轴上数据表示从线性进展转换为对数进展。
Scaling Method − 而不是像线性定标中那样沿 x 轴用相等增量表示值,对数 x 轴基于基值的幂(如 10 或 e)表示值。
Unequal Spacing − 轴上的相等距离对应于乘法因子或数量级,而不是固定间隔。
Use Case − 当处理涵盖广泛值的数据集时,对数 x 轴很有用,例如指数增长、大跨度的时间或集中在特定范围内具有异常值的数据分布。
在此示例中, plt.xscale('log') 函数将 x 轴设置为对数刻度。它将 x 轴从线性刻度转换为对数刻度,从而可以更好地可视化数据,尤其是在处理指数或范围广泛的 x 值时。
import matplotlib.pyplot as plt
import numpy as np
# Generating sample data
x = np.linspace(1, 1000, 100)
y = np.sin(x) * np.log10(x) # Generating data for demonstration
# Creating a plot with logarithmic x-axis
plt.figure(figsize=(8, 4))
plt.plot(x, y)
plt.xscale('log') # Set x-axis to logarithmic scale
plt.xlabel('X-axis (Logarithmic Scale)')
plt.ylabel('Y-axis')
plt.title('Plot with Logarithmic X-axis')
plt.show()
对数 x 轴在数据可视化中提供了不同的视角,强调 x 轴上跨不同数量级范围内的指数行为或模式。
Logarithmic Y-axis
对数 y 轴通常在 y 轴上表示为对数刻度,表示一种绘制方法,其中 y 轴上的值显示为对数而不是线性。这种缩放在处理跨越多个数量级的范围时尤为有用。
Matplotlib 中的对数 y 轴允许有效可视化涵盖范围广泛值的数据,因为它使观察使用线性比例时可能不明显的模式或趋势变得更加容易。
Logarithmic Scaling − 在 y 轴中的进行对数缩放,其中每个单位的增加代表乘法因子,即底数值的幂,通常为 10 或 e,而不是相等增量。
Equal Factors − 在 y 轴上的相等距离代表相等的乘法因子,而不是相等的数值差异。例如,在对数刻度上,1、10、100 的间隔代表 10 的倍数。
Compression of Data − 对数缩放通过简化可视化跨越多个数量级的范围的数据,压缩了广泛的值。
在这个例子中, plt.yscale('log') 将 y 轴设置为对数刻度。因此,通过在 y 轴上使用对数刻度显示指数增长数据,可以促进跨越广泛值范围的数据的可视化。
import matplotlib.pyplot as plt
import numpy as np
# Sample data with a wide range
x = np.linspace(1, 100, 100)
y = np.exp(x) # Exponential growth for demonstration
# Creating a plot with a logarithmic y-axis
plt.plot(x, y)
plt.yscale('log') # Set y-axis to logarithmic scale
plt.xlabel('X-axis')
plt.ylabel('Y-axis (Logarithmic Scale)')
plt.title('Plot with Logarithmic Y-axis')
plt.show()
Logarithmic both axes
在绘图中对 x 轴和 y 轴(即两个轴)应用对数缩放涉及使用对数刻度对基于数量级而不是线性增量表示值的两个维度进行缩放。当同时处理水平方向和垂直方向上跨越多个数量级的数据时,这种缩放特别有用。
当可视化在水平和垂直方向上都跨越多个数量级的数据时,对两个轴应用对数缩放是有效的,它压缩了值范围,以改进可视化和模式识别。
Wide Range of Data − 当 x 和 y 轴数据都跨越多个数量级时,对两个轴进行对数缩放可压缩可视化表示,以获得更好的洞察力。
Exponential Relationships − 在两个维度中可视化具有指数关系的数据。
Scientific and Engineering Data − 通常用于值跨越多个刻度的科学和工程绘图中。
在这个例子中, plt.xscale('log') 和 plt.yscale('log') 函数分别将 x 轴和 y 轴设置为对数刻度。此绘图以每个轴根据数量级表示值的方式可视化数据点,从而可以更好地可视化跨越两个维度广泛值范围的数据。
import matplotlib.pyplot as plt
import numpy as np
# Generating sample data with a wide range
x = np.linspace(1, 1000, 100)
y = np.logspace(1, 4, 100) # Logarithmically spaced data for demonstration
# Creating a plot with logarithmic scaling for both axes
plt.figure(figsize=(8, 6))
plt.scatter(x, y)
plt.xscale('log') # Set x-axis to logarithmic scale
plt.yscale('log') # Set y-axis to logarithmic scale
plt.xlabel('X-axis (Logarithmic Scale)')
plt.ylabel('Y-axis (Logarithmic Scale)')
plt.title('Plot with Logarithmic Both Axes')
plt.show()
Logarithmic Y-axis bins
在这个例子中,我们使用 matplotlib 库绘制对数 Y 轴箱。
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, 100, 1000)
y = np.log(x)
plt.yscale('log')
plt.plot(x, y, c="red", lw=3, linestyle="dashdot", label="y=log(x)")
plt.legend()
plt.show()