Python

Python matplotlib xkcd 手繪卡通圖模式教學與範例

介紹如何在 Python 中使用 matplotlibxkcd 模式,繪製手繪卡通圖風格的插圖。

手繪卡通圖模式

若要使用 matplotlibxkcd 模式繪製插圖樣式圖形,建議先安裝 Humor Sans 這個卡通風格的字型:

# 安裝 Humor Sans 字型
sudo apt-get install fonts-humor-sans

接著就可以在 Python 中使用 xkcd 模式繪製圖形了。

matplotlibxkcd 模式可以自動將圖形轉為手繪卡通圖的風格,只要將普通的 matplotlib 繪圖程式碼放進來,就可以自動轉為 xkcd 風格的圖片:

from matplotlib import pyplot as plt

with plt.xkcd():
    # 繪製 XKCD 風格圖形
    fig1 = plt.figure()
    # ...

# 繪製正常圖形
fig2 = plt.figure()

XKCD 風格折線圖

以下是一個 xkcd 風格折線圖的簡單範例:

from matplotlib import pyplot as plt
import numpy as np

# 繪製 XKCD 風格圖形
with plt.xkcd():
    # 建立空的圖形
    fig = plt.figure()

    # 增加座標軸
    ax = fig.add_axes((
      0.1, # X 座標
      0.2, # Y 座標
      0.8, # 寬度
      0.7  # 高度
    ))

    # 不顯示上方與右方的方框
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')

    # 不顯示 X 軸與 Y 軸的刻度
    ax.set_xticks([])
    ax.set_yticks([])

    # Y 軸顯示範圍
    ax.set_ylim([-20, 20])

    # 產生資料
    data = np.repeat(10, 100)
    data[70:] -= np.arange(30)

    # 加入註解
    ax.annotate('Annotation',
      xy=(69, 9),                       # 標示位置
      arrowprops=dict(arrowstyle='->'), # 箭頭屬性
      xytext=(45, -5))                  # 文字位置

    # 繪製資料
    ax.plot(data)

    # 設定 X 軸與 Y 軸文字
    ax.set_xlabel('x label')
    ax.set_ylabel('y label')

    # 加入文字
    fig.text(0.5, 0.05, 'This is my title', ha='center')
XKCD 風格折線圖

XKCD 風格直方圖

以下是一個 xkcd 風格直方圖(histogram)的簡單範例:

import matplotlib.pyplot as plt
import numpy as np

# 繪製 XKCD 風格圖形
with plt.xkcd():
    # 產生常態分布資料
    mu, sigma = 100, 15
    x = mu + sigma * np.random.randn(10000)

    # 繪製直方圖
    plt.hist(x, 50, density=True, facecolor='g', alpha=0.75)

    # 設定 X 軸與 Y 軸文字
    plt.xlabel('Smarts')
    plt.ylabel('Probability')

    # 設定圖形標題
    plt.title('Histogram of IQ')

    # 加入文字
    plt.text(45, .025, r'$\mu=100,\ \sigma=15$')

    # X 軸 與 Y 軸顯示範圍
    plt.xlim(40, 160)
    plt.ylim(0, 0.03)

    # 顯示格線
    plt.grid(True)
XKCD 風格直方圖

XKCD 風格長條圖

以下是一個 xkcd 風格長條圖(bar plot)的簡單範例:

import matplotlib.pyplot as plt
import numpy as np

# 繪製 XKCD 風格圖形
with plt.xkcd():
    # 產生資料
    x = np.arange(4)
    money = [150, 280, 550, 180]

    # 繪製長條圖
    plt.bar(x, money)

    # X 軸資料標示文字
    plt.xticks(x, ('Bill', 'Fred', 'Mary', 'Sue'))
XKCD 風格長條圖

XKCD 風格箱形圖

以下是一個 xkcd 風格箱形圖(box plot)的簡單範例:

import matplotlib.pyplot as plt
import numpy as np

# 繪製 XKCD 風格圖形
with plt.xkcd():
    # 產生常態分布資料
    x1 = 15 + 50 * np.random.randn(200)
    x2 = 30 * np.random.randn(150)
    x3 = 30 + 100 * np.random.randn(150)
    data = [x1, x2, x3]

    # 繪製箱形圖
    plt.boxplot(data)

    # X 軸資料標示文字
    plt.xticks([1, 2, 3], ['mon', 'tue', 'wed'])
XKCD 風格箱形圖

XKCD 風格圓餅圖

以下是一個 xkcd 風格圓餅圖(pie chart)的簡單範例:

import matplotlib.pyplot as plt

# 繪製 XKCD 風格圖形
with plt.xkcd():
    # 建立資料
    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
    sizes = [15, 30, 45, 10]
    explode = (0, 0.2, 0, 0)  # 將 Hogs 拆開

    # 繪製圓餅圖
    fig, ax = plt.subplots()
    ax.pie(sizes, explode=explode, labels=labels, autopct='%1d%%',
            shadow=False, startangle=90)
    ax.axis('equal')  # 將 X 與 Y 座標軸比例設定為相等
XKCD 風格圓餅圖

常見問題

如果安裝了 Humor Sans 字型之後,還是出現找不到字型的問題,可以嘗試執行以下 Python 指令重建 matplotlib 字型庫:

# 重建 matplotlib 字型庫
import matplotlib
matplotlib.font_manager._rebuild()

參考資料:matplotlib

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago