Matplotlib 是 Python 資料視覺化的核心套件,但其預設樣式有時難以滿足特定需求。本文將介紹如何透過調整 rc 引數和 stylesheets來自定義 Matplotlib 樣式,打造更具個人風格的圖表。同時,我們也會深入探討 Matplotlib 的三維繪圖功能,包含繪製三維點線、等高線圖、表面圖等技巧,並示範如何使用 plot_surface 和 plot_trisurf 函式繪製三維曲面。最後,文章還會介紹 Seaborn 這個根據 Matplotlib 的高階統計視覺化工具,並示範如何使用它來探索多維資料關係和分佈,例如使用 pairplot 函式繪製變數之間的關係圖,以及使用 FacetGrid 函式繪製分面圖來展現不同子集的資料分佈。
自定義Matplotlib樣式
Matplotlib是一個強大的資料視覺化工具,但其預設樣式可能不符合我們的需求。幸運的是,Matplotlib提供了一種方式來自定義其樣式。
修改預設樣式
每次Matplotlib載入時,它都會定義一個執行時組態,包含每個plot元素的預設樣式。這個組態可以在任何時候使用plt.rc便利函式進行調整。
import matplotlib.pyplot as plt
# 設定figure的背景顏色
plt.rcParams['figure.facecolor'] = 'white'
# 設定軸的背景顏色
plt.rcParams['axes.facecolor'] = '#E6E6E6'
# 顯示軸的網格線
plt.rcParams['grid.linestyle'] = 'solid'
plt.rcParams['grid.color'] = 'w'
# 隱藏軸的框線
for spine in plt.axes().spines.values():
spine.set_visible(False)
# 隱藏頂部和右側的刻度線
plt.rcParams['xtick.bottom'] = True
plt.rcParams['ytick.left'] = True
# 設定刻度線和標籤的顏色
plt.rcParams['xtick.color'] = 'gray'
plt.rcParams['ytick.color'] = 'gray'
plt.rcParams['axes.labelcolor'] = 'gray'
# 設定直方圖的邊框和填充顏色
plt.rcParams['hist.edgecolor'] = '#E6E6E6'
plt.rcParams['hist.facecolor'] = '#EE6666'
優點
使用plt.rc函式來修改Matplotlib的預設樣式有以下優點:
- 可以統一設定所有plot的樣式,避免每次都需要手動設定。
- 可以根據自己的需求定製化樣式,提高視覺化的效果。
自訂matplotlib風格
matplotlib提供了多種方式來自訂圖表的風格,包括使用rc引數和stylesheets。下面,我們將探討如何使用這些方法來建立個人化的圖表風格。
使用rc引數
rc引數(runtime configuration)是matplotlib用於設定圖表風格的引數。透過設定這些引數,可以自訂圖表的各個方面,包括顏色、字型、線寬等。下面的例子展示瞭如何使用rc引數來設定圖表風格:
import matplotlib.pyplot as plt
import numpy as np
# 設定rc引數
colors = ['#EE6666', '#3388BB', '#9988DD', '#EECC55', '#88BB44', '#FFBBBB']
plt.rc('figure', facecolor='white')
plt.rc('axes', facecolor='#E6E6E6', edgecolor='none', axisbelow=True, grid=True, prop_cycle=colors)
plt.rc('grid', color='w', linestyle='solid')
plt.rc('xtick', direction='out', color='gray')
plt.rc('ytick', direction='out', color='gray')
plt.rc('patch', edgecolor='#E6E6E6')
plt.rc('lines', linewidth=2)
# 建立圖表
x = np.random.rand(10)
plt.hist(x)
plt.show()
這個例子設定了圖表的背景顏色、軸線顏色、網格顏色等,並建立了一個直方圖。
使用stylesheets
matplotlib還提供了一種更方便的方式來自訂圖表風格,即使用stylesheets。stylesheets是預先定義好的風格設定,可以透過plt.style.use()函式來啟用。下面的例子展示瞭如何使用stylesheets:
import matplotlib.pyplot as plt
import numpy as np
# 列出可用的stylesheets
print(plt.style.available[:5])
# 啟用一個stylesheet
plt.style.use('Solarize_Light2')
# 建立圖表
x = np.random.rand(10)
plt.plot(x)
plt.show()
這個例子列出了可用的stylesheets,並啟用了Solarize_Light2風格,然後建立了一個線圖。
探索 Matplotlib 的樣式
Matplotlib 提供了多種內建樣式,讓使用者可以輕鬆地改變繪圖的外觀。要使用這些樣式,可以使用 plt.style.use() 函式。例如,要使用 stylename 樣式,可以使用以下程式碼:
plt.style.use('stylename')
但是,需要注意的是,這將會改變整個 Python 會話的樣式。如果你只想暫時改變樣式,可以使用樣式管理器:
with plt.style.context('stylename'):
# your code here
現在,讓我們建立一個函式來示範這些樣式。這個函式將會生成兩種基本的繪圖:直方圖和折線圖。
import numpy as np
import matplotlib.pyplot as plt
def hist_and_lines():
np.random.seed(0)
fig, ax = plt.subplots(1, 2, figsize=(11, 4))
ax[0].hist(np.random.randn(1000))
for i in range(3):
ax[1].plot(np.random.rand(10))
ax[1].legend(['a', 'b', 'c'], loc='lower left')
接下來,我們將使用這個函式來探索不同的樣式。
預設樣式
Matplotlib 的預設樣式在 2.0 版本中進行了更新。讓我們先看看這個樣式(見圖 34-5)。
hist_and_lines()
FiveThirtyEight 樣式
FiveThirtyEight 樣式模仿了流行的 FiveThirtyEight 網站上的圖形。如圖 34-6 所示,它的特點是線條粗、軸透明。
plt.style.use('fivethirtyeight')
hist_and_lines()
內容解密:
plt.style.use('stylename'):設定 Matplotlib 的樣式。with plt.style.context('stylename'):暫時設定樣式。hist_and_lines():生成兩種基本的繪圖:直方圖和折線圖。
圖表翻譯:
以下是使用 FiveThirtyEight 樣式生成的圖表:
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Matplotlib樣式自定義與三維繪圖技巧
package "圖論網路分析" {
package "節點層" {
component [節點 A] as nodeA
component [節點 B] as nodeB
component [節點 C] as nodeC
component [節點 D] as nodeD
}
package "中心性指標" {
component [度中心性
Degree Centrality] as degree
component [特徵向量中心性
Eigenvector Centrality] as eigen
component [介數中心性
Betweenness Centrality] as between
component [接近中心性
Closeness Centrality] as close
}
}
nodeA -- nodeB
nodeA -- nodeC
nodeB -- nodeD
nodeC -- nodeD
nodeA --> degree : 計算連接數
nodeA --> eigen : 計算影響力
nodeB --> between : 計算橋接度
nodeC --> close : 計算距離
note right of degree
直接連接數量
衡量局部影響力
end note
note right of eigen
考慮鄰居重要性
衡量全局影響力
end note
@enduml
這個圖表展示了使用 FiveThirtyEight 樣式生成的圖表的過程。首先,設定樣式,然後生成圖表,最後顯示圖表。
探索 Matplotlib 的樣式世界
Matplotlib 提供了多種樣式選擇,讓使用者可以根據自己的需求定製視覺化效果。這些樣式不僅能夠改變圖表的外觀,也能夠影響到資料的呈現方式。
fivethirtyeight 樣式
fivethirtyeight 樣式是 Matplotlib 中的一種熱門選擇,它模仿了流行的資料新聞網站 FiveThirtyEight 的視覺化風格。這種樣式特點是簡潔、清晰,非常適合用於資料分析和新聞報導。
import matplotlib.pyplot as plt
# 使用 fivethirtyeight 樣式
plt.style.use('fivethirtyeight')
# 繪製圖表
plt.hist([1, 2, 3, 4, 5])
plt.show()
ggplot 樣式
ggplot 樣式是 Matplotlib 中另一種受歡迎的選擇,它模仿了 R 語言中 ggplot2 包的視覺化風格。這種樣式特點是色彩豐富、視覺效果強烈,非常適合用於資料科學和研究領域。
import matplotlib.pyplot as plt
# 使用 ggplot 樣式
plt.style.use('ggplot')
# 繪製圖表
plt.plot([1, 2, 3, 4, 5])
plt.show()
Bayesian Methods for Hackers 樣式
Bayesian Methods for Hackers 樣式是一種特殊的樣式,它源自於一本名為 “Probabilistic Programming and Bayesian Methods for Hackers” 的線上書籍。這種樣式特點是簡潔、優雅,非常適合用於資料分析和機器學習領域。
import matplotlib.pyplot as plt
# 使用 bmh 樣式
plt.style.use('bmh')
# 繪製圖表
plt.scatter([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
plt.show()
Dark Background 樣式
Dark Background 樣式是一種特殊的樣式,它適合用於需要在黑色背景下呈現圖表的情況。這種樣式特點是背景色為黑色,非常適合用於演講和報告中。
import matplotlib.pyplot as plt
# 使用 dark_background 樣式
plt.style.use('dark_background')
# 繪製圖表
plt.bar([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
plt.show()
Grayscale 樣式
Grayscale 樣式是一種特殊的樣式,它適合用於需要在灰色背景下呈現圖表的情況。這種樣式特點是背景色為灰色,非常適合用於印刷出版物中。
import matplotlib.pyplot as plt
# 使用 grayscale 樣式
plt.style.use('grayscale')
# 繪製圖表
plt.plot([1, 2, 3, 4, 5])
plt.show()
Seaborn 樣式
Seaborn 樣式是一種特殊的樣式,它源自於 Seaborn 函式庫。這種樣式特點是視覺效果強烈、色彩豐富,非常適合用於資料分析和科學研究領域。
import seaborn as sns
import matplotlib.pyplot as plt
# 使用 seaborn 樣式
sns.set()
# 繪製圖表
plt.hist([1, 2, 3, 4, 5])
plt.show()
圖表翻譯:
以上程式碼展示了 Matplotlib 中不同樣式的使用方法。每種樣式都有其特點和適用場景,使用者可以根據自己的需求選擇合適的樣式來呈現資料。
三維繪圖在Matplotlib
Matplotlib最初被設計為只考慮二維繪圖。然而,在1.0版本發布時,Matplotlib的二維顯示上增加了一些三維繪圖工具,從而提供了一套方便但略有侷限的三維資料視覺化工具。要啟用三維繪圖,需要從mpl_toolkits中匯入mplot3d模組:
from mpl_toolkits import mplot3d
一旦匯入了這個子模組,就可以透過在建立軸的函式中新增projection='3d'來建立三維軸。以下是建立一個空的三維軸的示例(見圖35-1):
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
三維點和線
最基本的三維繪圖是由(x, y, z)三元組集建立的線或散點圖。與之前討論的二維繪圖類別似,可以使用ax.plot3D和ax.scatter3D函式來建立這些圖形。這些函式的呼叫簽名與其二維對應函式幾乎相同,因此您可以參考第26章和第27章以瞭解更多關於控制輸出的資訊。
以下程式碼示範了一個三維螺旋線以及一些線上附近隨機生成的點(見圖35-2):
ax = plt.axes(projection='3d')
# 三維線的資料
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline) # 注意:yline在原文中沒有定義,因此增加了這一行
ax.plot3D(xline, yline, zline, 'gray')
# 三維散點的資料
zdata = 15 * np.random.random(100)
xdata = np.sin(zdata) + 0.1 * np.random.randn(100)
ydata = np.cos(zdata) + 0.1 * np.random.randn(100) # 注意:ydata在原文中沒有定義,因此增加了這一行
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens');
請注意,散點的透明度會根據其z值進行調整,以給人一種深度感。在靜態影像中,三維效果有時難以體現,但在互動式檢視中可以更好地理解點的佈局。
三維等高線圖
與第28章中探討的等高線圖類別似,mplot3d包含了建立三維浮雕圖的工具,使用二維規則網格的相同輸入形式,並在每個點評估z資料。以下程式碼示範了一個三維正弦函式的等高線圖(見圖35-3):
def f(x, y):
return np.sin(np.sqrt(x ** 2 + y ** 2))
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none');
這段程式碼建立了一個三維正弦函式的表面圖,展示瞭如何使用plot_surface函式來繪製三維等高線圖。
圖表翻譯:
上述程式碼使用了plot_surface函式來繪製三維等高線圖。這個函式需要三個二維陣列X、Y和Z,分別代表x、y和z坐標。cmap引數用於指定顏色對映,而edgecolor引數用於指定網格邊緣的顏色。在這個例子中,我們使用viridis顏色對映並將邊緣顏色設為none,以便更好地展示三維表面的曲率。
3D繪圖技術
在資料科學中,3D繪圖是一種強大的工具,能夠幫助我們形象化複雜的資料。下面,我們將探討如何使用Python的matplotlib函式庫來建立3D繪圖。
基本3D繪圖
首先,我們需要建立一個3D繪圖區域。這可以透過以下程式碼實作:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
# 定義一個3D函式
def f(X, Y):
return np.sin(np.sqrt(X**2 + Y**2))
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
在這裡,我們使用np.linspace函式建立了兩個範圍從-6到6的陣列x和y,然後使用np.meshgrid函式建立了兩個網格陣列X和Y。接著,我們定義了一個3D函式f(X, Y),然後計算了對應的Z值。
設定座標軸標籤
接下來,我們需要設定座標軸標籤:
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
這些程式碼設定了x、y和z軸的標籤。
調整視角
有時候,預設的視角並不理想。這時候,我們可以使用view_init方法來調整視角:
ax.view_init(60, 35)
這裡,我們設定了仰角(elevation)為60度,方位角(azimuth)為35度。
線框圖和表面圖
除了基本的3D繪圖以外,matplotlib還提供了線框圖(wireframe)和表面圖(surface plot)的功能。這些圖可以幫助我們更好地理解資料的結構。
線框圖
線框圖是一種特殊的3D繪圖,透過連線網格點來形成一個線框結構:
ax.plot_wireframe(X, Y, Z)
ax.set_title('線框圖')
表面圖
表面圖則是將每個面填充為多邊形:
ax.plot_surface(X, Y, Z, cmap='viridis')
ax.set_title('表面圖')
在這裡,我們使用了plot_surface方法來建立一個表面圖,並且增加了一個colormap來幫助我們理解資料的拓樸結構。
3D 表面繪製與三角化
在進行 3D 資料視覺化時,瞭解如何繪製表面和進行三角化是非常重要的。這些技術可以幫助我們更好地理解和呈現複雜的 3D 資料。
3D 表面繪製
首先,讓我們看看如何使用 Matplotlib 繪製 3D 表面。為了建立一個 3D 表面,我們需要定義 x、y 和 z 的值。這些值可以來自於函式計算或實際資料。
import numpy as np
import matplotlib.pyplot as plt
# 定義 x 和 y 的範圍
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
# 定義 z 的值
Z = np.sin(np.sqrt(X**2 + Y**2))
# 建立 3D 軸
ax = plt.axes(projection='3d')
# 繪製 3D 表面
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
# 設定標題
ax.set_title('3D 表面繪製')
plt.show()
三角化
在某些情況下,我們可能沒有均勻取樣的網格資料,而是有一組隨機的點。這時,三角化就可以幫助我們建立出一個近似的表面。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 生成隨機點
theta = 2 * np.pi * np.random.random(1000)
r = 6 * np.random.random(1000)
x = r * np.sin(theta)
y = r * np.cos(theta)
z = np.sin(np.sqrt(x**2 + y**2))
# 建立 3D 軸
ax = plt.axes(projection='3d')
# 繪製三角化表面
ax.plot_trisurf(x, y, z, cmap='viridis', edgecolor='none')
plt.show()
Möbius 帶視覺化
Möbius 帶是一個有趣的幾何形狀,它只有一個面。要視覺化這個形狀,我們需要定義它的引數化。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 定義 Möbius 帶的引數化
theta = np.linspace(0, 2*np.pi, 100)
w = np.linspace(-1, 1, 8)
W, Theta = np.meshgrid(w, theta)
# 定義 x、y 和 z 的值
X = (1 + W * np.cos(Theta/2)) * np.cos(Theta)
Y = (1 + W * np.cos(Theta/2)) * np.sin(Theta)
Z = W * np.sin(Theta/2)
# 建立 3D 軸
ax = plt.axes(projection='3d')
# 繪製 Möbius 帶
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
plt.show()
這些例子展示瞭如何使用 Matplotlib 進行 3D 表面繪製和三角化,以及如何視覺化一個 Möbius 帶。這些技術可以用於各種科學和工程應用中,以更好地理解和呈現複雜的 3D 資料。
使用Python和Matplotlib繪製莫比烏斯帶
莫比烏斯帶是一種具有特殊拓撲結構的幾何形狀,下面我們將使用Python和Matplotlib來繪製它。
首先,我們需要定義莫比烏斯帶的引數化。莫比烏斯帶可以被視為一個在其中心周圍旋轉的環面,同時其軸也在進行扭曲。這種扭曲可以用兩個引數來描述:θ(環面在其中心周圍的位置)和φ(扭曲角度)。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 定義引數
theta = np.linspace(0, 2 * np.pi, 100)
w = np.linspace(-0.25, 0.25, 20)
# 建立網格
w, theta = np.meshgrid(w, theta)
# 計算扭曲角度
phi = 0.5 * theta
接下來,我們需要計算莫比烏斯帶在三維空間中的嵌入。這涉及到計算每個點在x-y平面上的距離(r),然後使用這個距離來計算嵌入的(x, y, z)坐標。
# 計算距離
r = 1 + w * np.cos(phi)
# 計算x, y, z坐標
x = r * np.cos(theta)
y = r * np.sin(theta)
z = w * np.sin(phi)
最後,我們可以使用Matplotlib來繪製莫比烏斯帶。為了確保三角化正確,我們需要定義三角化在底層引數化中,然後讓Matplotlib將這個三角化投影到三維空間中。
# 建立三維軸
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 繪製莫比烏斯帶
ax.plot_surface(x, y, z, cmap='Greys', linewidths=0.2)
# 設定軸限
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)
ax.set_zlim(-1, 1)
# 關閉軸
ax.axis('off')
plt.show()
這樣就完成了使用Python和Matplotlib繪製莫比烏斯帶的過程。透過這個例子,我們可以看到Matplotlib在科學視覺化中的強大能力,以及它如何幫助我們探索和理解複雜的幾何形狀。
圖表翻譯:
此圖示莫比烏斯帶的三維嵌入,展示了其特殊的拓撲結構。透過調整引數θ和φ,可以觀察到莫比烏斯帶的扭曲和旋轉。這個視覺化結果有助於我們更好地理解莫比烏斯帶的性質和行為。
Seaborn:根據Matplotlib的高階統計視覺化工具
Seaborn是一個根據Matplotlib的Python資料視覺化函式庫,旨在提供高階的統計視覺化工具。它的出現是為瞭解決Matplotlib在統計視覺化方面的一些不足之處,例如缺乏現代化的色彩和風格預設設定、需要大量的樣板程式碼來實作複雜的統計視覺化等。
Seaborn的優點
Seaborn提供了一個簡單易用的API,允許使用者輕鬆地建立各種統計視覺化圖表,包括直方圖、核密度估計、聯合分佈等。它還提供了對Pandas DataFrame物件的支援,使得使用者可以輕鬆地將資料轉換為視覺化圖表。
Seaborn的主要功能
Seaborn提供了以下幾個主要功能:
- 直方圖和核密度估計:Seaborn提供了
sns.histplot()和sns.kdeplot()函式,允許使用者建立直方圖和核密度估計圖表。 - 聯合分佈圖表:Seaborn提供了
sns.jointplot()函式,允許使用者建立聯合分佈圖表。 - 配對圖表:Seaborn提供了
sns.pairplot()函式,允許使用者建立配對圖表,用於探索多維資料之間的關係。
Seaborn的使用
以下是Seaborn的一個簡單示例:
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 載入iris資料集
iris = sns.load_dataset("iris")
# 建立一個配對圖表
sns.pairplot(iris)
# 顯示圖表
plt.show()
這個示例將建立一個配對圖表,用於探索iris資料集中的變數之間的關係。
資料視覺化:探索多維關係和分佈
在資料科學中,視覺化是探索和理解複雜資料的強大工具。Seaborn是一個根據Matplotlib的Python資料視覺化函式庫,提供了高階別的介面來繪製有吸引力的和資訊豐富的統計圖形。
多維關係視覺化
視覺化多維關係可以幫助我們瞭解變數之間的相互作用和關聯。Seaborn的pairplot函式可以用來建立一個矩陣圖,展示所有變數之間的關係。例如,使用Iris資料集:
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
sns.pairplot(iris, hue='species', height=2.5)
plt.show()
這個圖表展示了四個變數(花萼長度、花萼寬度、花瓣長度和花瓣寬度)之間的關係,並根據物種對資料進行著色。
分佈視覺化
分佈視覺化可以幫助我們瞭解資料的分佈情況。Seaborn的FacetGrid類別可以用來建立分面直方圖,展示不同子集的分佈。例如,使用Tips資料集:
tips = sns.load_dataset('tips')
tips['tip_pct'] = 100 * tips['tip'] / tips['total_bill']
grid = sns.FacetGrid(tips, row="sex", col="time", margin_titles=True)
grid.map(plt.hist, "tip_pct", bins=np.linspace(0, 40, 15))
plt.show()
這個圖表展示了小費百分比在不同性別和時間下的分佈情況。
類別視覺化
類別視覺化可以幫助我們瞭解類別變數的分佈情況。Seaborn的catplot函式可以用來建立類別視覺化圖表。例如:
sns.catplot(x="day", y="total_bill", data=tips)
plt.show()
這個圖表展示了不同星期幾的總消費情況。
探索資料視覺化:分類別圖、聯合分佈和長條圖
在資料科學中,視覺化是探索和理解資料的重要工具。Seaborn是一個根據Matplotlib的Python資料視覺化函式庫,提供了高階別的介面來繪製有吸引力的和資訊豐富的統計圖形。以下,我們將探索如何使用Seaborn來建立分類別圖、聯合分佈圖和長條圖,以便更好地理解資料。
分類別圖
分類別圖(Factor Plot)用於比較不同類別下的資料分佈。例如,我們可以使用分類別圖來比較不同性別的人的總消費金額(Total Bill)分佈。
import seaborn as sns
import matplotlib.pyplot as plt
# 載入tips資料集
tips = sns.load_dataset('tips')
# 建立分類別圖
with sns.axes_style(style='ticks'):
g = sns.catplot(x="day", y="total_bill", hue="sex", data=tips, kind="box")
g.set_axis_labels("Day", "Total Bill")
plt.show()
這個圖表顯示了不同性別的人在不同日期的總消費金額分佈。
聯合分佈圖
聯合分佈圖(Joint Plot)用於顯示兩個變數之間的關係,以及每個變數的邊緣分佈。例如,我們可以使用聯合分佈圖來顯示總消費金額(Total Bill)和小費(Tip)之間的關係。
# 建立聯合分佈圖
with sns.axes_style('white'):
sns.jointplot(x="total_bill", y="tip", data=tips, kind='hex')
plt.show()
這個圖表顯示了總消費金額和小費之間的關係,以及每個變數的邊緣分佈。
長條圖
長條圖(Bar Plot)用於顯示不同類別下的資料數量或頻率。例如,我們可以使用長條圖來顯示不同年份的行星發現數量。
# 載入planets資料集
planets = sns.load_dataset('planets')
# 建立長條圖
with sns.axes_style('white'):
g = sns.catplot(x="year", data=planets, aspect=2, kind="count", color='steelblue')
plt.show()
這個圖表顯示了不同年份的行星發現數量。
圖表翻譯:
上述程式碼使用Seaborn函式庫來建立分類別圖、聯合分佈圖和長條圖。這些圖表可以幫助我們更好地理解資料,並發現資料中的模式和關係。透過使用不同的視覺化工具,我們可以對資料有更深入的瞭解,並做出更好的決策。
從技術架構視角來看,Matplotlib 的高度客製化能力是其一大優勢,允許開發者深入控制圖表樣式,從全域性引數調整到個別元素的精細設定。本文分析了三種主要的客製化方法:plt.rc 引數調整、stylesheet 應用,以及 3D 繪圖的進階技巧。這些方法各有千秋,plt.rc 適合全域性風格統一,stylesheet 提供便捷的預設風格,而 3D 繪圖則拓展了資料視覺化的維度。然而,直接修改 plt.rc 引數可能影響全域性設定,需謹慎使用;stylesheet 的數量有限,未必能滿足所有需求;3D 繪圖在靜態呈現上仍有改進空間。Seaborn 建立在 Matplotlib 之上,簡化了複雜統計圖表的建立流程,但其高度封裝也可能限制了部分客製化彈性。展望未來,Matplotlib 仍將持續最佳化其 3D 繪圖引擎,並可能引入更豐富的內建樣式和互動式功能,以滿足日益增長的視覺化需求。對於追求高度客製化的開發者,深入理解 Matplotlib 的底層架構和 API 至關重要,才能最大程度地發揮其強大功能。玄貓認為,Matplotlib 與 Seaborn 的結合使用,能兼顧彈性與效率,是目前 Python 資料視覺化的最佳實踐。