熱門文章

2023年5月11日 星期四

Matplotlib 繪圖技巧:加上資料標籤及改變字型

作者:王一哲
日期:2023年5月11日


加上資料標籤



在某些特殊的狀況下,會在數據點旁邊標示資料點的數值。下方程式碼第14 ~ 16行,依序讀取串列 x、y 的元素,組合成字串 txt,再用 annotate [1] 將 txt 標示在數據點的右側,下圖是採用預設字型的效果。
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [3, 5, 7, 9, 11]

plt.figure(figsize=(8, 6), dpi=96)
plt.xlabel("x", fontsize=24)
plt.ylabel("y", fontsize=24)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.grid(color="grey", linestyle="--", linewidth=1)
plt.plot(x, y, marker="o", markerfacecolor="blue", markersize=8, linestyle="")

for i in range(len(x)):
    txt = "(" + str(x[i]) + ", " + str(y[i]) + ")"
    plt.annotate(txt, (x[i]+0.1, y[i]-0.1), fontsize=18)

plt.show()

預設樣式


改變字型



由於我們經常使用的英文、數字字型為 Times New Roman,如果要將圖中的字型改為 Times New Roman,在第2行加上這行程式碼。
plt.rcParams["font.family"] = "Times New Roman"
使用 matplotlib.rc [2] 也有同樣的效果。
from matplotlib import rc
rc("font", **{"family" : "Times New Roman"})

改變字型為 Times New Roman


將縱軸、横軸標籤為斜體



但通常物理量的代號為斜體字,單位則採用一般的字體,也就是在縱軸、横軸標籤內,只有部分字體是斜體字,為了達成這個效果,要將這2行程式碼改掉
plt.xlabel("x", fontsize=24)
plt.ylabel("y", fontsize=24)
改成以下這樣
plt.xlabel(r"$\mathit{x}$", fontsize=24)
plt.ylabel(r"$\mathit{y}$", fontsize=24)

下圖是修改後的成果,但是斜體字的字型不是 Times New Roman,也不是常用的數學式子字型。
改變字型為 Times New Roman 但縱軸、横軸標籤為斜體


使用 $\LaTeX$ 功能



如果想要使用常見的數學式子字型,我認為效果最好的作法是使用 $\LaTeX$ 功能,在 from matplotlib import rc 這行之後加上,但是執行時要等幾秒鐘才會出現繪圖成果。
rc("text", usetex=True)

使用 LaTeX 功能的效果


參考資料



  1. matplotlib.pyplot.annotate 官方說明書
  2. matplotlib.pyplot.rc 官方說明書




HackMD 版本連結:https://hackmd.io/@yizhewang/HyxpvG6YEh

沒有留言:

張貼留言