Matplotlib 是 Python 資料視覺化中最廣泛使用的函式庫之一,它提供了豐富的繪圖功能,可以建立各種靜態、互動式和動畫圖表。然而,要充分利用 Matplotlib 的潛力,需要掌握一些進階技巧。本文將深入探討這些技巧,包含自訂圖例、多重圖例、顏色對映的選擇與應用、色階限制、子圖的建立與佈局,以及如何使用文字和註解來強化圖表的表達力。這些技巧可以幫助開發者和資料科學家建立更具資訊性和吸引力的圖表,有效地傳達資料背後的洞見。從簡單的線圖到複雜的多子圖佈局,Matplotlib 提供了靈活的工具來滿足各種視覺化需求,讓資料呈現更清晰、更具說服力。
自訂圖例元素
當預設的圖例設定不能滿足需求時,可以使用label引數來自訂圖例元素。例如,下面的程式碼建立了一個簡單的線圖,並為每條線增加了自訂的圖例標籤。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.random.rand(100, 3)
plt.plot(x, y[:, 0], label='第一條線')
plt.plot(x, y[:, 1], label='第二條線')
plt.plot(x, y[:, 2:], label='第三條線')
plt.legend(frameon=True)
plt.show()
注意到,沒有設定label引數的元素將不會出現在圖例中。
根據點的大小建立圖例
在某些情況下,點的大小可能代表著重要的資訊,例如城市的人口數量。為了建立一個反映點大小的圖例,可以使用scatter函式,並設定s引數來控制點的大小。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 載入加州城市資料
cities = pd.read_csv('data/california_cities.csv')
# 提取有趣的資料
lat, lon = cities['latd'], cities['longd']
population, area = cities['population_total'], cities['area_total_km2']
# 使用scatter函式繪製點,設定大小和顏色,但不設定標籤
plt.scatter(lon, lat, label=None, c=np.log10(population), cmap='viridis', s=area, linewidth=0, alpha=0.5)
# 設定軸為等比例
plt.axis('equal')
# 設定x軸標籤
plt.xlabel('經度')
# 顯示圖表
plt.show()
這個範例使用點的大小來表示城市的人口數量,並使用顏色來表示其他資訊。
圖表翻譯:
上述程式碼建立了一個散點圖,使用點的大小來表示加州城市的人口數量,並使用顏色來表示其他資訊。圖表的x軸代表經度,y軸代表緯度。點的大小和顏色都根據城市的人口數量和麵積來設定。這個圖表可以幫助我們直觀地瞭解加州城市的人口分佈和麵積大小。
內容解密:
scatter函式用於繪製散點圖,設定s引數來控制點的大小。c引數用於設定點的顏色,根據人口數量的對數來設定。alpha引數用於設定點的透明度,設為0.5使得點可以重疊而不完全遮蔽。axis函式用於設定軸為等比例,確保圖表中的距離正確反映實際距離。xlabel函式用於設定x軸標籤,設為’經度’以指示x軸代表經度。
自訂圖例與多重圖例
在使用Matplotlib進行資料視覺化時,圖例是提供額外資訊的重要工具。然而,Matplotlib的預設圖例功能可能無法滿足所有需求,特別是在需要建立多個圖例的情況下。
建立自訂圖例
首先,我們來看看如何建立一個自訂圖例。假設我們有一個地理分佈圖,想要顯示城市的面積和人口資料。為了達到這個目的,我們可以使用plt.scatter函式來繪製空白的點,並指定其大小和標籤,以此來建立圖例。
import matplotlib.pyplot as plt
import numpy as np
# 繪製空白點以建立圖例
for area in [100, 300, 500]:
plt.scatter([], [], c='k', alpha=0.3, s=area, label=str(area) + ' km$^2$')
# 顯示圖例
plt.legend(scatterpoints=1, frameon=False, labelspacing=1, title='City Area')
plt.title('California Cities: Area and Population')
多重圖例
不幸的是,Matplotlib的標準圖例介面只允許建立一個圖例。如果你嘗試使用plt.legend或ax.legend建立第二個圖例,它將會覆寫第一個圖例。為了克服這個限制,你可以使用Artist類別(Matplotlib用於視覺屬性的基礎類別)來手動新增第二個藝術家到繪圖中。
# 建立子繪圖區域
fig, ax = plt.subplots()
# 定義線條樣式和資料
styles = ['-', '--', '-.', ':']
x = np.linspace(0, 10, 1000)
# 繪製線條
lines = []
for i in range(4):
lines += ax.plot(x, np.sin(x - i * np.pi / 2), styles[i], color='black')
# 設定座標軸為等比例
ax.axis('equal')
# 指定第一個圖例的線條和標籤
ax.legend(lines[:2], ['line A', 'line B'], loc='upper right')
手動新增第二個圖例
如果你需要多個圖例,可以使用ax.add_artist方法手動新增第二個藝術家到繪圖中。這需要你建立一個新的Legend物件,並指定其位置和內容。
# 建立第二個圖例
second_legend = plt.legend(lines[2:], ['line C', 'line D'], loc='lower right')
# 手動新增第二個圖例到繪圖中
ax.add_artist(second_legend)
這樣,你就可以在同一個繪圖中顯示多個圖例,提供更多的資訊給觀眾。
自訂色彩條
在Matplotlib中,色彩條(colorbar)是一種能夠為繪圖中不同顏色賦予意義的工具。它通常用於表示圖中點、線或區域的連續標籤。下面,我們將探討如何自訂色彩條以滿足不同的需求。
基本色彩條
首先,我們來看一下如何建立一個基本的色彩條。假設我們有一個簡單的影像,我們可以使用imshow函式來顯示它,並新增一個色彩條來解釋圖中的顏色。
import matplotlib.pyplot as plt
import numpy as np
# 建立一個隨機的影像
I = np.random.rand(10, 10)
# 顯示影像並新增色彩條
plt.imshow(I)
plt.colorbar()
plt.show()
自訂色彩條
Matplotlib提供了多種預設的色彩對映(colormap),我們可以透過cmap引數來指定。例如,我們可以使用Blues色彩對映來建立一個藍色調的影像。
import matplotlib.pyplot as plt
import numpy as np
# 建立一個隨機的影像
I = np.random.rand(10, 10)
# 顯示影像並新增藍色調的色彩條
plt.imshow(I, cmap='Blues')
plt.colorbar()
plt.show()
選擇合適的色彩對映
選擇合適的色彩對映對於有效地傳達資訊至關重要。Matplotlib提供了許多預設的色彩對映,我們可以透過plt.cm名稱空間來存取它們。例如,我們可以使用plt.cm.<TAB>來檢視所有可用的色彩對映。
色彩對映類別
一般來說,色彩對映可以分為三類別:
- 順序色彩對映(Sequential colormaps):這類別色彩對映適合於表示資料的順序或排名。
- 發散色彩對映(Diverging colormaps):這類別色彩對映適合於表示資料的發散或對比。
- 迴圈色彩對映(Cyclic colormaps):這類別色彩對映適合於表示資料的迴圈或週期性。
選擇合適的色彩對映需要考慮資料的性質、視覺效果以及易用性等因素。透過選擇合適的色彩對映,我們可以更有效地傳達資訊並提高影像的可讀性。
圖表翻譯:
在上面的Plantuml圖表中,我們展示了資料與不同類別的色彩對映之間的關係。透過選擇合適的色彩對映,我們可以更有效地傳達資訊並提高影像的可讀性。
顏色對映圖(Colormaps)型別與應用
顏色對映圖是資料視覺化中的一個重要工具,能夠幫助我們更好地理解和呈現資料。根據其特性,顏色對映圖可以分為三種型別:順序顏色對映圖(Sequential colormaps)、分歧顏色對映圖(Divergent colormaps)和質性顏色對映圖(Qualitative colormaps)。
順序顏色對映圖
順序顏色對映圖由一系列連續的顏色組成,例如二元或viridis。這型別的顏色對映圖適合用於表示資料的連續變化。
分歧顏色對映圖
分歧顏色對映圖通常包含兩種不同的顏色,分別表示正向和反向的偏差,例如RdBu或PuOr。這型別的顏色對映圖適合用於表示資料的對比和比較。
質性顏色對映圖
質性顏色對映圖混合了多種顏色,但沒有特定的順序,例如rainbow或jet。這型別的顏色對映圖通常不適合用於表示資料的連續變化,因為它們通常不會顯示出統一的亮度進展。
顏色對映圖的選擇
選擇合適的顏色對映圖對於資料視覺化非常重要。不同的顏色對映圖可以影響資料的呈現和解釋。例如,質性顏色對映圖可能會導致資料的誤解,因為它們通常不會顯示出統一的亮度進展。
程式碼實作
以下是Python程式碼,實作了顏色對映圖的轉換和顯示:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
def grayscale_cmap(cmap):
"""傳回給定顏色對映圖的灰階版本"""
cmap = plt.cm.get_cmap(cmap)
colors = cmap(np.arange(cmap.N))
# 將RGBA轉換為感知到的灰階亮度
RGB_weight = [0.299, 0.587, 0.114]
luminance = np.sqrt(np.dot(colors[:, :3] ** 2, RGB_weight))
colors[:, :3] = luminance[:, np.newaxis]
return LinearSegmentedColormap.from_list(cmap.name + "_gray", colors, cmap.N)
def view_colormap(cmap):
"""繪製給定顏色對映圖及其灰階等效版本"""
cmap = plt.cm.get_cmap(cmap)
colors = cmap(np.arange(cmap.N))
#...
內容解密:
上述程式碼定義了兩個函式:grayscale_cmap和view_colormap。grayscale_cmap函式將給定的顏色對映圖轉換為其灰階版本,而view_colormap函式則繪製給定的顏色對映圖及其灰階等效版本。
圖表翻譯:
以下是Plantuml圖表,展示了顏色對映圖的型別和轉換過程: 這個Plantuml圖表展示了不同型別的顏色對映圖之間的關係,以及如何將其轉換為灰階版本。
顏色對映與色階限制
在資料視覺化中,選擇合適的顏色對映(colormap)對於有效傳達資訊至關重要。不同的顏色對映可以大幅影響觀眾對資料的感知和理解。Matplotlib 提供了多種內建的顏色對映,包括 ‘jet’、‘viridis’ 和 ‘RdBu’ 等。
顏色對映選擇
- jet:這是一種傳統的顏色對映,但它的亮度變化不均勻,可能導致觀眾對某些部分的資料給予過多的注意力。
- viridis:作為 Matplotlib 2.0 之後的預設顏色對映,viridis 具有均勻的亮度變化,能夠更好地與人類的色覺相協調,並且在灰階列印中也能保持良好的可視性。
- RdBu(紅-藍):這種雙色條顏色對映適合於展示資料的正負偏差,但需要注意的是,這種對映在轉換為灰階時會丟失正負資訊。
顏色對映示例
import numpy as np
import matplotlib.pyplot as plt
# 顏色對映示例
cmap = plt.get_cmap('viridis')
grayscale = cmap(np.arange(cmap.N))
fig, ax = plt.subplots(2, figsize=(6, 2), subplot_kw=dict(xticks=[], yticks=[]))
ax[0].imshow([np.array([0.5])], extent=[0, 10, 0, 1], cmap='jet')
ax[1].imshow([grayscale], extent=[0, 10, 0, 1])
plt.show()
色階限制和擴充套件
Matplotlib 還允許對色條進行自定義,包括設定色階限制和表示超出範圍的值。這可以透過 vmin 和 vmax 引數來實作,同時也可以使用 extend 引數來指定如何表示超出範圍的值。
# 色階限制示例
speckles = (np.random.random((10, 10)) < 0.01)
plt.figure(figsize=(10, 3.5))
plt.subplot(1, 2, 1)
plt.imshow(speckles, cmap='viridis', vmin=0, vmax=1)
plt.colorbar(extend='both') # 顯示超出範圍的值
plt.show()
使用Matplotlib進行資料視覺化
在資料科學中,資料視覺化是一個非常重要的步驟,可以幫助我們更好地理解資料的分佈和模式。Matplotlib是一個流行的Python資料視覺化函式庫,提供了多種工具和功能來建立高品質的圖表。
顏色對映和擴充套件
在建立圖表時,選擇合適的顏色對映(colormap)非常重要。Matplotlib提供了多種內建的顏色對映,包括’RdBu’、‘Blues’等。除了這些內建的顏色對映外,我們還可以使用plt.cm.get_cmap函式來建立自定義的顏色對映。
import matplotlib.pyplot as plt
import numpy as np
# 建立一個隨機的2D陣列
I = np.random.rand(10, 10)
# 使用'RdBu'顏色對映
plt.imshow(I, cmap='RdBu')
# 設定顏色限制
plt.clim(-1, 1)
# 顯示圖表
plt.show()
離散顏色條
在某些情況下,我們可能需要使用離散的顏色條來表示資料。Matplotlib提供了plt.cm.get_cmap函式來建立離散的顏色條。
import matplotlib.pyplot as plt
import numpy as np
# 建立一個隨機的2D陣列
I = np.random.rand(10, 10)
# 使用離散的'Blues'顏色條
plt.imshow(I, cmap=plt.cm.get_cmap('Blues', 6))
# 設定顏色限制
plt.clim(-1, 1)
# 顯示圖表
plt.show()
手寫數字資料集
手寫數字資料集是一個常用的機器學習資料集,包含了近2000個手寫數字的影像。下面是使用Matplotlib顯示這些影像的一個例子。
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
# 載入手寫數字資料集
digits = load_digits(n_class=6)
# 建立一個8x8的子圖陣列
fig, ax = plt.subplots(8, 8, figsize=(6, 6))
# 顯示每個影像
for i, axi in enumerate(ax.flat):
axi.imshow(digits.images[i], cmap='binary')
axi.set(xticks=[], yticks=[])
# 顯示圖表
plt.show()
降維技術
在高維度空間中,資料點之間的距離和關係可能很難被直觀地理解。降維技術可以幫助我們將高維度資料投影到低維度空間中,從而更好地理解資料的分佈和模式。Isomap是一種常用的降維技術,下面是使用Isomap對手寫數字資料集進行降維的一個例子。
import matplotlib.pyplot as plt
from sklearn.manifold import Isomap
from sklearn.datasets import load_digits
# 載入手寫數字資料集
digits = load_digits(n_class=6)
# 建立一個Isomap物件
isomap = Isomap(n_components=2)
# 對資料進行降維
digits_isomap = isomap.fit_transform(digits.data)
# 顯示降維後的資料
plt.scatter(digits_isomap[:, 0], digits_isomap[:, 1], c=digits.target)
plt.show()
這些例子展示了Matplotlib和Scikit-learn在資料視覺化和降維技術中的應用。透過使用這些工具和技術,我們可以更好地理解複雜的資料,並從中提取有用的資訊。
使用Isomap進行手寫數字資料的降維
Isomap(Isometric Mapping)是一種非線性降維技術,能夠有效地將高維度資料對映到低維度空間中。以下是使用Isomap對手寫數字資料進行降維的範例:
from sklearn.manifold import Isomap
import matplotlib.pyplot as plt
import numpy as np
# 載入手寫數字資料
from sklearn.datasets import load_digits
digits = load_digits()
# 建立Isomap模型
iso = Isomap(n_components=2, n_neighbors=15)
# 對資料進行降維
projection = iso.fit_transform(digits.data)
# 繪製結果
plt.scatter(projection[:, 0], projection[:, 1], lw=0.1, c=digits.target, cmap=plt.cm.get_cmap('plasma', 6))
plt.clim(-0.5, 5.5)
plt.show()
這個範例使用Isomap將手寫數字資料從原來的64維度降至2維度,然後使用matplotlib繪製結果。由於Isomap是一種非線性降維技術,因此能夠有效地保留資料中的非線性結構。
多子圖表的建立
Matplotlib提供了多種方式來建立多子圖表,包括使用plt.axes()、fig.add_axes()、plt.subplots()等函式。以下是使用plt.axes()建立多子圖表的範例:
import matplotlib.pyplot as plt
import numpy as np
# 建立一個新圖表
plt.figure()
# 建立一個標準的軸
ax1 = plt.axes()
# 建立一個嵌入的軸
ax2 = plt.axes([0.65, 0.65, 0.2, 0.2])
# 繪製結果
plt.show()
這個範例使用plt.axes()建立了一個標準的軸和一個嵌入的軸,然後使用matplotlib繪製結果。
物件導向介面的使用
Matplotlib也提供了物件導向介面來建立多子圖表。以下是使用fig.add_axes()建立多子圖表的範例:
import matplotlib.pyplot as plt
import numpy as np
# 建立一個新圖表
fig = plt.figure()
# 建立兩個垂直堆積疊的軸
ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4], xticklabels=[], ylim=(-1.2, 1.2))
ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.4])
# 繪製結果
plt.show()
這個範例使用fig.add_axes()建立了兩個垂直堆積疊的軸,然後使用matplotlib繪製結果。
使用Matplotlib進行子圖建立
在進行資料視覺化時,常常需要建立多個子圖來展示不同的資料。Matplotlib提供了多種方法來建立子圖,包括plt.subplot、plt.subplots和fig.add_subplot。
使用plt.subplot
plt.subplot是一種低階別的函式,用於建立單個子圖。它需要三個整數引數:行數、列數和子圖索引。子圖索引從左上角開始,按行優先排列。
import matplotlib.pyplot as plt
import numpy as np
# 建立一個2x3的子圖網格
for i in range(1, 7):
plt.subplot(2, 3, i)
plt.text(0.5, 0.5, str((2, 3, i)), fontsize=18, ha='center')
使用plt.subplots
plt.subplots是一種更高階別的函式,用於建立整個子圖網格。它傳回一個包含所有子圖例項的NumPy陣列,可以使用標準陣列索引符號來存取。
# 建立一個2x3的子圖網格
fig, ax = plt.subplots(2, 3, sharex='col', sharey='row')
# 存取子圖例項
for i in range(2):
for j in range(3):
ax[i, j].text(0.5, 0.5, str((i, j)), fontsize=18, ha='center')
調整子圖間距
可以使用plt.subplots_adjust函式來調整子圖間距。
# 建立一個2x3的子圖網格
fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)
for i in range(1, 7):
ax = fig.add_subplot(2, 3, i)
ax.text(0.5, 0.5, str((2, 3, i)), fontsize=18, ha='center')
子圖分享軸
可以使用sharex和sharey引數來指定子圖之間的軸分享關係。
# 建立一個2x3的子圖網格,分享x軸和y軸
fig, ax = plt.subplots(2, 3, sharex='col', sharey='row')
這些方法可以幫助您建立複雜的子圖網格,並進行資料視覺化。
使用 plt.GridSpec 來建立複雜的子圖佈局
在建立多個子圖的時候,plt.subplot 可能會有一些限制,特別是在需要建立不規則的子圖佈局時。這時候,plt.GridSpec 就是一個非常有用的工具。它允許你建立一個網格,並指定每個子圖的位置和大小。
基本使用
首先,你需要建立一個 GridSpec 物件,指定網格的行數和列數,以及每個子圖之間的水平和垂直間距。例如:
grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
這會建立一個 2x3 的網格,水平間距為 0.4,垂直間距為 0.3。
指定子圖位置和大小
然後,你可以使用 Python 的切片語法來指定每個子圖的位置和大小。例如:
plt.subplot(grid[0, 0]) # 第一行第一列
plt.subplot(grid[0, 1:]) # 第一行第二列到最後一列
plt.subplot(grid[1, :2]) # 第二行第一列到第二列
plt.subplot(grid[1, 2]) # 第二行第三列
這會建立四個子圖,分別位於網格的不同位置。
應用範例
plt.GridSpec 的應用範圍非常廣泛。例如,你可以使用它來建立多個軸的 histogram 圖形,如下所示:
# 建立一些正態分佈的資料
mean = [0, 0]
cov = [[1, 1], [1, 2]]
rng = np.random.default_rng(1701)
x, y = rng.multivariate_normal(mean, cov, 3000).T
# 設定軸的 GridSpec
grid = plt.GridSpec(2, 2, wspace=0.4, hspace=0.3)
# 建立子圖
ax1 = plt.subplot(grid[0, 0])
ax2 = plt.subplot(grid[0, 1])
ax3 = plt.subplot(grid[1, :])
# 繪製 histogram
ax1.hist(x, bins=30)
ax2.hist(y, bins=30)
ax3.hist2d(x, y, bins=30)
這會建立一個 2x2 的網格,包含三個子圖:兩個一維 histogram 和一個二維 histogram。
圖表翻譯:
上述程式碼會產生一個包含三個子圖的圖表。第一個子圖是 x 軸的 histogram,第二個子圖是 y 軸的 histogram,第三個子圖是 x 和 y 軸的二維 histogram。這些子圖可以幫助我們瞭解資料的分佈情況。
內容解密:
在上述程式碼中,我們首先建立了一個 GridSpec 物件,指定網格的行數和列數,以及每個子圖之間的水平和垂直間距。然後,我們使用 Python 的切片語法來指定每個子圖的位置和大小。最後,我們使用 plt.subplot 函式來建立子圖,並使用 hist 和 hist2d 函式來繪製 histogram。
資料視覺化中的文字和註解
資料視覺化的目標是透過圖表來傳達資訊,讓讀者能夠快速理解複雜的資料。然而,在許多情況下,僅靠視覺化並不足以完全傳達資訊,尤其是當資料具有多個維度或需要額外的解釋時。這時,文字和註解就成了不可或缺的工具,幫助讀者更好地理解圖表中的資訊。
軸標籤和標題
最基本的文字註解包括軸標籤和標題。軸標籤用於描述座標軸的意義,而標題則提供了圖表的總體概覽。這些元素對於讓讀者快速理解圖表的內容至關重要。
資料點註解
除了軸標籤和標題外,資料點註解也是常見的一種文字註解。它們用於提供關於特定資料點的額外資訊,例如資料來源、時間戳或其他相關細節。這些註解可以以多種形式呈現,例如工具提示、氣泡框或直接在圖表上標記。
圖例和色彩對映
圖例是另一種重要的文字註解,用於解釋圖表中不同顏色、符號或線型的意義。它們通常以色彩對映的形式出現,幫助讀者快速識別不同類別或值的對應關係。
自訂文字註解
除了上述標準註解外,還可以使用自訂文字註解來提供更多資訊。例如,可以在圖表上新增箭頭、框線或其他形狀,以強調特定的趨勢或模式。這些自訂註解可以根據具體需求進行設計,以滿足不同的視覺化需求。
範例:使用Matplotlib進行資料視覺化
以下是一個使用Matplotlib函式庫進行資料視覺化的範例,展示瞭如何新增文字註解和自訂元素:
import matplotlib.pyplot as plt
# 建立一個新圖表
fig, ax = plt.subplots()
# 繪製資料
ax.plot([1, 2, 3], [1, 4, 9])
# 新增軸標籤和標題
ax.set_xlabel('X軸')
ax.set_ylabel('Y軸')
ax.set_title('簡單資料視覺化')
# 新增資料點註解
ax.annotate('資料點1', xy=(1, 1), xytext=(10, 10), arrowprops=dict(facecolor='black'))
# 顯示圖表
plt.show()
這個範例展示瞭如何使用Matplotlib新增基本的文字註解,包括軸標籤、標題和資料點註解。透過這些元素,可以更好地解釋圖表中的資訊,並提高視覺化的可讀性和可理解性。
圖表翻譯:
上述程式碼建立了一個簡單的資料視覺化圖表,展示瞭如何使用Matplotlib函式庫新增文字註解和自訂元素。透過這個範例,可以學習如何使用Matplotlib進行資料視覺化,並新增必要的文字註解以提高圖表的可讀性和可理解性。
資料視覺化與註解
當我們處理資料時,瞭解如何將其視覺化並新增註解以傳達有趣的資訊至關重要。讓我們從一個實際的例子開始,探討美國假日對出生率的影響。
首先,我們需要載入必要的函式庫,包括 matplotlib 和 pandas。我們使用 seaborn-whitegrid 樣式來建立一個更漂亮的圖表。
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.style.use('seaborn-whitegrid')
import numpy as np
import pandas as pd
接下來,我們載入出生率資料,並進行一些基本的資料清理。這包括下載資料、讀取 CSV 檔案、移除異常值以及設定日期索引。
# 載入資料
births = pd.read_csv('data/births.csv')
# 移除異常值
quartiles = np.percentile(births['births'], [25, 50, 75])
mu, sig = quartiles[1], 0.74 * (quartiles[2] - quartiles[0])
births = births.query('(births > @mu - 5 * @sig) & (births < @mu + 5 * @sig)')
# 設定日期索引
births['day'] = births['day'].astype(int)
births.index = pd.to_datetime(10000 * births.year + 100 * births.month + births.day, format='%Y%m%d')
然後,我們將資料轉換為每日出生率,並建立一個.pivot_table來計算每個月份和日期的平均出生率。
# 轉換為每日出生率
births_by_date = births.pivot_table('births', [births.index.month, births.index.day])
# 設定日期索引
births_by_date.index = [datetime(2012, month, day) for (month, day) in births_by_date.index]
現在,我們可以使用 matplotlib 來建立一個圖表,展示每日出生率的變化。
# 建立圖表
fig, ax = plt.subplots(figsize=(12, 4))
births_by_date.plot(ax=ax)
內容解密:
在這個例子中,我們使用 pandas 來載入和清理資料,然後使用 matplotlib 來建立一個圖表。圖表展示了每日出生率的變化,我們可以看到假日對出生率的影響。
圖表翻譯:
此圖示展示了每日出生率的變化,x 軸代表日期,y 軸代表出生率。圖表中可以看到假日對出生率的影響,例如聖誕節和新年前夕的出生率較低。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Matplotlib圖表進階技巧與應用
package "資料視覺化流程" {
package "資料準備" {
component [資料載入] as load
component [資料清洗] as clean
component [資料轉換] as transform
}
package "圖表類型" {
component [折線圖 Line] as line
component [長條圖 Bar] as bar
component [散佈圖 Scatter] as scatter
component [熱力圖 Heatmap] as heatmap
}
package "美化輸出" {
component [樣式設定] as style
component [標籤註解] as label
component [匯出儲存] as export
}
}
load --> clean --> transform
transform --> line
transform --> bar
transform --> scatter
transform --> heatmap
line --> style --> export
bar --> label --> export
note right of scatter
探索變數關係
發現異常值
end note
@enduml圖表翻譯:
此圖示展示了資料處理和視覺化的流程,從載入資料到展示圖表。每個步驟都很重要,以確保資料的準確性和圖表的有效性。
使用Matplotlib進行資料視覺化
在資料科學中,視覺化是呈現資料的一種強大工具。Matplotlib是一個流行的Python函式庫,提供了豐富的功能來建立高品質的2D和3D圖表。以下是使用Matplotlib進行資料視覺化的範例。
安裝Matplotlib
如果您尚未安裝Matplotlib,可以使用pip進行安裝:
pip install matplotlib
基本圖表
以下是使用Matplotlib建立一個基本圖表的範例:
import matplotlib.pyplot as plt
# 資料
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
# 建立圖表
plt.plot(x, y)
# 顯示圖表
plt.show()
這將建立一個簡單的線圖,顯示x和y之間的關係。
自訂圖表
您可以使用各種選項自訂圖表,例如新增標題、標籤和圖例。以下是範例:
import matplotlib.pyplot as plt
# 資料
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
# 建立圖表
plt.plot(x, y, label='y = x^2')
# 新增標題和標籤
plt.title('y = x^2')
plt.xlabel('x')
plt.ylabel('y')
# 新增圖例
plt.legend()
# 顯示圖表
plt.show()
這將建立一個具有標題、標籤和圖例的線圖。
使用不同的座標系統
Matplotlib提供了多種座標系統,包括資料座標、軸座標和圖表座標。以下是使用不同的座標系統的範例:
import matplotlib.pyplot as plt
# 建立圖表
fig, ax = plt.subplots()
# 資料座標
ax.text(1, 5, '資料座標', transform=ax.transData)
# 軸座標
ax.text(0.5, 0.1, '軸座標', transform=ax.transAxes)
# 圖表座標
ax.text(0.2, 0.2, '圖表座標', transform=fig.transFigure)
# 顯示圖表
plt.show()
這將建立一個具有不同座標系統的圖表。
箭頭和註解
您可以使用箭頭和註解來新增額外的資訊到圖表中。以下是範例:
import matplotlib.pyplot as plt
# 建立圖表
fig, ax = plt.subplots()
# 資料
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
# 建立圖表
ax.plot(x, y)
# 新增箭頭
ax.arrow(2, 4, 1, 1, head_width=0.1)
# 新增註解
ax.annotate('y = x^2', xy=(2, 4), xytext=(3, 5), arrowprops=dict(facecolor='black'))
# 顯示圖表
plt.show()
這將建立一個具有箭頭和註解的線圖。
圖表翻譯:
上述程式碼範例展示瞭如何使用Matplotlib進行資料視覺化,包括建立基本圖表、自訂圖表、使用不同的座標系統、新增箭頭和註解等。這些功能可以幫助您更好地呈現資料並獲得洞察力。
使用Matplotlib的annotate函式進行圖表標註
在Matplotlib中,annotate函式是一個強大的工具,允許您在圖表中新增標註和箭頭。這個函式提供了許多選項,讓您可以自定義箭頭的樣式、顏色和連線方式。
玄貓總結:Matplotlib 資料視覺化與圖表增強技巧
從產業生態的視角來看,Matplotlib 作為 Python 資料視覺化的根本,在資料科學領域扮演著不可或缺的角色。從簡單的線圖到複雜的多子圖、自訂圖例、顏色對映,Matplotlib 提供了豐富的功能,滿足各種資料視覺化需求。
深入剖析 Matplotlib 的架構,我們發現其物件導向的設計模式賦予了高度的靈活性。藉由 axes、figure 等物件的操控,開發者可以精細地控制圖表的每個細節,實作高度客製化的視覺化效果。然而,對於初學者而言,掌握 Matplotlib 的完整功能需要一定的學習曲線。
透過多維度效能指標的實測分析,Matplotlib 在處理大量資料時,效能表現出色。尤其在靜態圖表生成方面,Matplotlib 具有顯著的優勢。然而,在互動式圖表和 3D 視覺化方面,其他函式庫,例如 Plotly 和 Mayavi,可能提供更佳的效能和使用者經驗。
技術限制深析顯示,Matplotlib 在處理動態圖表和複雜的互動式視覺化時,略顯不足。此外,直接在 Matplotlib 中建立網頁圖表也並非其強項。然而,透過與其他函式庫的整合,例如 Seaborn 和 Bokeh,可以有效地彌補這些不足。
展望未來,Matplotlib 將持續在資料視覺化領域扮演重要角色。隨著資料科學的蓬勃發展,我們預見 Matplotlib 將持續最佳化其效能,並整合更多先進的視覺化技術,例如更豐富的顏色對映、更靈活的註解功能以及更強大的 3D 視覺化能力。
玄貓認為,Matplotlib 對於任何資料科學家而言,都是一項必備的技能。熟練掌握 Matplotlib,將能有效地提升資料分析和呈現的能力,進而將資料轉化為有價值的洞察。對於追求更高效能和互動性的使用者,建議探索其他視覺化函式庫,並與 Matplotlib 整合使用,以達到最佳的視覺化效果。