返回文章列表

Matplotlib樣式自定義與三維繪圖技巧

本文深入探討 Matplotlib 樣式的自定義方法,包含修改 rc 引數、使用 stylesheets,並示範如何繪製三維圖形,包含三維點線、等高線圖、表面圖等,同時也介紹了 Seaborn 這個根據 Matplotlib 的高階統計視覺化工具及其在多維關係和分佈探索中的應用。

資料視覺化 Python

Matplotlib 是 Python 資料視覺化的核心套件,但其預設樣式有時難以滿足特定需求。本文將介紹如何透過調整 rc 引數和 stylesheets來自定義 Matplotlib 樣式,打造更具個人風格的圖表。同時,我們也會深入探討 Matplotlib 的三維繪圖功能,包含繪製三維點線、等高線圖、表面圖等技巧,並示範如何使用 plot_surfaceplot_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.plot3Dax.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的陣列xy,然後使用np.meshgrid函式建立了兩個網格陣列XY。接著,我們定義了一個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 資料視覺化的最佳實踐。