Matplotlib 简明教程

Matplotlib - Scales

What are Scales in Matplotlib?

在 Matplotlib 库中,比例是指将数据值映射到绘图物理尺寸的过程。它们确定数据值如何沿着绘图的坐标轴表示和可视化。Matplotlib 支持各种类型的比例,并且比例的选择会显著影响可视化中数据的感知方式。

以下是 matplotlib 库中可用的常见比例类型:

  1. Linear Scale − 适用于大多数数值数据,而这些数值数据在大小上的变化不大。

  2. Logarithmic Scale - 适用于跨越若干个数量级或呈指数增长的数据集。

  3. Symmetrical Logarithmic Scale - 适用于具有正值和负值的均数据集。

让我们逐一进行查看。

Linear Scale

线性刻度是用于以沿绘图中轴线表示数据的默认刻度。这是直接映射,其中数据值直接按其实际数值比例进行绘图。在线性刻度中,轴线上的等距表示数据中的等差。

Characteristics of Linear Scale

  1. Equal Intervals - 在线性刻度中,轴线上的等距对应于数据值中的等差。

  2. Linear Mapping - 数据值与其在轴线上的位置之间的关系是线性的。

Using Linear Scale

默认情况下,Matplotlib 库对 x 轴和 y 轴均使用线性刻度。为了明确设置线性刻度,我们不需要使用任何特定函数,因为这是默认行为。但是,我们可以使用 plt.xscale('linear')plt.yscale('linear') 分别明确指定它,以用于 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-axis')
plt.ylabel('Y-axis')
plt.title('Linear Scale')
plt.show()

以下是以上程序的输出 −

linear scale

When to Use Linear Scale

  1. 线性刻度通常在数据没有指数增长或值范围不太大时使用。

  2. 它适用于表示大多数没有明显非线性行为的数字数据。

Logarithmic Scale

对数刻度使用对数映射来表示数据。当值范围较大并且对数刻度有助于强调较小值的改变时,这非常有用。

Characteristics of Logarithmic Scale

以下是对数刻度的特征 -

  1. Equal Ratios - 在线性刻度中,轴线上的等距表示值之间的等比,而不是等差。

  2. Compression of Data - 它将广泛的数据压缩为更具可读性和可解释性的视觉效果。

  3. Emphasizes Smaller Values - 它比较大的值更强调较小值的改变。

Using Logarithmic Scale

要使用对数刻度,我们必须分别为 x 轴或 y 轴指定 plt.xscale('log') 或 plt.yscale('log') 。对数刻度对于可视化指数增长或跨越几个数量级的现象特别有用。

When to Use Logarithmic Scale

对数刻度适用于幅值变化大的数据,或需要突出较小值改变的情况。在金融(股票价格)、科学研究(分贝、地震震级)和生物学(pH 值)等领域中经常使用。

Example

以下是具有对数刻度的示例绘图 -

import matplotlib.pyplot as plt
import numpy as np

# Generating logarithmically spaced data
x = np.linspace(1, 10, 100)
y = np.log(x)

# Creating a plot with a logarithmic scale for the x-axis
plt.plot(x, y)
plt.xscale('log')  # Set logarithmic scale for the x-axis
plt.xlabel('X-axis (log scale)')
plt.ylabel('Y-axis')
plt.title('Logarithmic Scale')
plt.show()

以下是以上程序的输出 −

logarithmic scale

在绘图中使用对数刻度可以深入了解具有广泛值的数据,从而更容易在同一绘图中跨不同刻度可视化模式和趋势。

Logarithmic plot of a cumulative distribution function

下例显示了累积分布函数的对数图。

Example

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
N = 100
data = np.random.randn(N)
X2 = np.sort(data)
F2 = np.array(range(N))/float(N)
plt.plot(X2, F2)
plt.xscale('log')
plt.yscale('log')
plt.show()

以下是以上程序的输出 −

cummulative log

Symmetrical Logarithmic Scale

对称对数比例尺类似于对数比例尺。它通常缩写为 symlog ,是一种用于表示轴上数据的比例尺,其中值使用对数间隔以对称于零的方式分布。它为正值和负值提供了对数式比例尺,同时容纳零。

若要在 x 轴和 y 轴上应用对称对数比例尺,我们必须分别使用 plt.xscale(‘symlog’)plt.yscale(‘symlog’)

Characteristics of Symmetrical Logarithmic Scale

对称对数比例尺具有以下特征。

  1. Symmetrical Behaviour − 以对数方式同时表示正值和负值,同时处理零。

  2. Linear Near Zero − 在转换为对数行为之前,该比例尺在指定范围内 (linthresh) 内围绕零是线性的。

Parameters for Symmetrical Logarithmic Scale

linthresh − 线性阈值,确定在转换为对数比例尺之前比例尺呈线性行为时的零值周围的范围。

何时使用对称对数比例尺:

  1. Data around Zero − 适用于包含围绕零值的范围广泛的正值和负值的的数据集。

  2. Avoiding Symmetry Bias − 需要对正值和负值进行对称表示时,且无偏向于任何一方。

Importance of Symmetrical Logarithmic Scale

对称对数比例尺提供了一种容纳正值和负值的对数式比例尺,使其对于可视化围绕零值平衡分布的数据集非常有用。

它还有助于突出显示围绕零值的较小变化,同时容纳较大值,而不会使表示出现偏差。

Example

在此图中,我们使用 plt.yscale('symlog', linthresh=0.01) 在 y 轴上创建对称对数比例尺。

import matplotlib.pyplot as plt
import numpy as np

# Generating data for a sine wave with values around zero
x = np.linspace(-10, 10, 500)
y = np.sin(x)

# Creating a plot with a symmetrical logarithmic scale for the y-axis
plt.plot(x, y)

# Set symmetrical logarithmic scale for the y-axis
plt.yscale('symlog', linthresh=0.01)
plt.xlabel('X-axis')
plt.ylabel('Y-axis (symlog scale)')
plt.title('Symmetrical Logarithmic Scale')
plt.show()

以下是以上程序的输出 −

symmetric log

在 Matplotlib 中使用对称对数比例尺可以让可视化数据集包含在零值周围,通过启用对称分布数据的有效表示和分析。调整线性阈值 (linthresh) 参数至关重要,以确定比例尺呈线性行为时的零值周围的范围,然后转换为对数比例尺。

Logit Scale

Logit scale 是一种专门类型的比例尺,用于表示轴上值限制在 0 和 1 之间的数据。它专门设计用于此范围内的数据,通常在概率或表示概率的值中遇到。

Setting the Scale

plt.xscale()plt.yscale() 函数可以分别用于设置 x 轴和 y 轴的比例尺。

Characteristics of Logit Scale

以下是 Logit 比例尺的特征。

  1. Constrains Data − 专门用于界于 0 和 1 之间的数据。

  2. Transformation − 利用 logit 函数从标准 logistic 分布映射值。

When to Use Logit Scale

  1. Probability Data - 适用于可视化概率或表示概率的值,尤其是在处理逻辑斯蒂回归或逻辑模型时。

  2. Data within 0 to 1 Range - 专门针对在 0 至 1 区间内有界的数据设计。

Importance of Logit Scale

  1. Logit 标度有助于可视化和分析表示概率或具有概率解释的数据。

  2. 它还有助于理解和可视化与概率相关数据的转换。

Example 1

在此绘图中,我们在 x 轴和 y 轴上创建 Logit 标度。

import matplotlib.pyplot as plt
import numpy as np

# Generating data within the 0 to 1 range
x = np.linspace(0.001, 0.999, 100)
y = np.log(x / (1 - x))

# Creating a plot with a logit scale for the x-axis
plt.plot(x, y)
plt.xscale('logit')  # Set logit scale for the x-axis
plt.xlabel('X-axis (logit scale)')
plt.ylabel('Y-axis')
plt.title('Logit Scale')
plt.show()

以下是以上程序的输出 −

logit scale

理解并为绘图选择合适的标度对于准确表示基础数据并确保在可视化中有效地传达模式和趋势非常重要。

Example 2

在此绘图中,我们按照名称绘制 yscale 类 linear、log、logit 和 symlog。

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))

# linear
plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')

# log
plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')

# symmetric log
plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthresh=0.01)
plt.title('symlog')

# logit
plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.show()

以下是以上程序的输出 −

yscale class