Matplotlib - 線性與對數刻度



什麼是刻度?

在 Matplotlib 庫中,刻度指的是將資料值對映到繪圖物理尺寸的方式。它們決定了資料值如何在繪圖的座標軸上表示和視覺化。Matplotlib 支援各種型別的刻度,刻度的選擇會顯著影響資料在視覺化中的呈現方式。

Matplotlib 中常見的刻度型別

以下是 Matplotlib 庫中常見的刻度型別。

序號 刻度及用途
1

線性刻度

適用於大多數數值資料,這些資料的大小變化不大。

2

對數刻度

適用於涵蓋多個數量級或呈現指數增長的資料集。

3

對稱對數刻度

適用於既有正值也有負值的資料集。

4

Logit 刻度

專門用於介於 0 和 1 之間的資料。

線性刻度

線性刻度是預設用於表示繪圖中座標軸上資料的刻度。它是一種直接對映,其中資料值與其實際數值成正比。線上性刻度中,座標軸上的等距表示資料值的等差。

線性刻度的特徵

  • 等間隔 - 線上性刻度中,座標軸上的等距對應於資料值的等差。
  • 線性對映 - 資料值與其在座標軸上的位置之間的關係是線性的。

使用線性刻度

預設情況下,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

何時使用線性刻度

  • 當資料沒有指數增長或值範圍不太大時,通常使用線性刻度。
  • 它適用於表示大多數不表現出顯著非線性行為的數值資料。

對數刻度

對數刻度使用對數對映來表示資料。當值範圍很廣時,這很有用,對數刻度有助於強調較小值的變化。

對數刻度的特徵

以下是對數刻度的特徵。

相等比率

在對數刻度中,座標軸上的等距表示值之間的等比,而不是等差。

資料壓縮

它將廣泛的資料壓縮到更易於閱讀和解釋的視覺化中。

強調較小值

它比更大的值更強調較小值的變化。

使用對數刻度

要使用對數刻度,我們必須分別為 x 軸或 y 軸指定 plt.xscale('log') 或 plt.yscale('log')。對數刻度特別適用於視覺化指數增長或涵蓋多個數量級的現象。

何時使用對數刻度

  • 對數刻度適用於幅度變化很大的資料,或者需要突出顯示較小值變化的情況。
  • 常用在金融(股票價格)、科學研究(分貝水平、地震震級)和生物學(pH 值)等領域。

以下是使用對數刻度的示例圖。

示例

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

在繪圖中使用對數刻度可以提供對值範圍很廣的資料的見解,從而更容易在同一繪圖中視覺化不同比例尺的模式和趨勢。

累積分佈函式的對數圖

此示例顯示累積分佈函式的對數圖。

示例

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
廣告