程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python繪圖之Times New Roman字體以及Helvetica字體

編輯:Python

Matplotlib繪圖之Times New Roman&Helvetica

  • 問題描述
  • plt繪圖中如何設置Times New Roman字體?
  • plt繪圖中如何設置Helvetica字體?
    • plt 繪圖字體設置
    • plt 繪圖Helvetica字體設置
      • 字體文件路徑
      • 字體下載
      • 刪除 matplotlib 的緩沖目錄
      • 修改文件 matplotlibrc,增加配置
      • 重啟
      • Validation

問題描述

論文插圖字體一般要求Times New Roman或者Helvetica字體,前者不必說,字體也還不錯,應用也比較廣泛,但有個問題是中文顯示是方框,後者是MATLAB默認字體,起初接觸的時候還沒覺得如何,後來隨著對各種字體的摸索,當然也是期刊要求,發現她(Helvetica)真好看!pycharm中使用python包matplotlib進行科研繪圖,這兩款字體中俺心心念念的Helvetica字體卻無法被用到,雖然與其長相相似的Arial字體可以用,但強迫症的我決定抽出時間解決這個問題。因為我從未見過真正的Helvetica長啥樣,請聽我細細道來。

plt繪圖中如何設置Times New Roman字體?

雖然說更喜歡Helvetica(下文以H代之),但是Times New Roman (T) 也不錯,而且最先接觸的正式西文字體是T,但是,不知道咋回事,python繪圖中Times New Roman 字體無法設置粗細,這不致命,致命的是它始終顯示粗體。這咋整?(正經地說,“這應當如何解決呢?”)搜尋了大量方法,真的是大量,然後在組內同學幫助下找到了以下博客文章,解決了該問題,用上了可變化粗細的T字體,至少一字在手科研繪圖不愁。此處不贅述,親測2次(python 3.7和3.8兩次都用了這個方法),鏈接:

  1. 使用matplotlib修改字體之Times New Roman
  2. 解決Matplotlib中Times New Roman字體無法改變字體
    以上兩篇文章的方法大致相同,希望可以解決字體問題。贊兩位博主。

plt繪圖中如何設置Helvetica字體?

這是本文重點。

plt 繪圖字體設置

首先看看plt中字體輸入要求:

要在圖中顯示相應字體,至少要設置family這一項,先選字體家族(綠色箭頭所指),然後設置具體的字體,當然也可直接設置family為具體字體的名字。T字體在serif中,H字體在sans-serif中。

直接放代碼:

import matplotlib.pyplot as plt
plt.rcParams['axes.linewidth'] = 1 # 圖框寬度
plt.rcParams['figure.dpi'] = 300 # plt.show顯示分辨率
font = {
'family': 'serif',
'serif': 'Times New Roman',
'weight': 'normal',
'size': 10}
plt.rc('font', **font)
plt.figure()
x = [1, 2, 3]
y = [k ** 2 for k in x]
plt.plot(x, y)
plt.title('This is Times New Roman Font', fontweight='normal')
plt.savefig(r"C:\Users\Asus\Desktop\times1.jpg", dpi=600, bbox_inches='tight', pad_inches=0.01)
plt.show()


如果這時候要用以下這種設置:

font = {
'family': 'sans-serif',
'sans-serif': 'Helvetica',
'weight': 'normal',
'size': 10}

恭喜你,你將會看到如下錯誤:

UserWarning: findfont: Font family [‘sans-serif‘] not found. Falling back to DejaVu Sans.

然後就使用默認字體來繪圖了。

plt 繪圖Helvetica字體設置

解決方法來自於該博客:
Python數據可視化第 2 講:matplotlib 繪圖中文字體設置
以及 Font family [‘sans-serif’] not found. Falling back to DejaVu Sans. Solution

==================方法描述:

字體文件路徑

import matplotlib
print(matplotlib.matplotlib_fname())

F:\python38\lib\site-packages\matplotlib\mpl-data\matplotlibrc

找到F:\python38\lib\site-packages\matplotlib\mpl-data路徑即可,然後下載字體Helvetica。

字體下載

有錢人下正版,沒錢人下。。。不下正版就是了,分享一個鏈接:Helvetica字體 免費版 下載之家 ; 正版鏈接:Helvetica 害,幾十美刀吧也就。嗯。
以第一種方法為例,解壓如下(解壓密碼在下載之家網站上有說明):


把該.tff文件復制到這個路徑下:F:\python38\Lib\site-packages\matplotlib\mpl-data\fonts\ttf.

當然你可以進一步把它存到電腦的系統字體裡:控制面板\外觀和個性化\字體,然後可以在adobe等畫圖軟件裡也使用它。

刪除 matplotlib 的緩沖目錄

import matplotlib
print(matplotlib.get_cachedir())

C:\Users\Asus.matplotlib

Windows中手動刪除該路徑文件就行。

修改文件 matplotlibrc,增加配置

該文件仍在字體路徑下:

用txt、notepad++、python都可以打開編輯。別問我為啥知道,因為都試過。大概在228-259行。

# 1.去掉下面一行的 # 號
font.family : sans-serif
# 2.去掉下面一行前面的 # 號,並在冒號後面添加 Hevetica,如果有就不需要加了
font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
# 3.去掉下面一行前面的 # 號,並將True改為False
axes.unicode_minus : False

重啟

關了python,重啟。

Validation

到了熟悉的實驗驗證環節,證明方法的有效性(effectiveness)。

plt.rcParams['axes.linewidth'] = 1 # 圖框寬度
plt.rcParams['figure.dpi'] = 300 # 圖框寬度
font = {
'family': 'sans-serif',
'sans-serif': 'Helvetica',
'weight': 'normal',
'size': 10}
plt.rc('font', **font) # pass in the font dict as kwargs
plt.figure()
x = [1, 2, 3]
y = [k ** 2 for k in x]
plt.plot(x, y)
plt.title('This is Helvetica Font', fontweight='normal')
plt.savefig(r"C:\Users\Asus\Desktop\helvetica1.jpg", dpi=600, bbox_inches='tight', pad_inches=0.01)
plt.show()


與MATLAB對比一下:

當然,前面說過,Windows上面會把Helvetica字體給你弄成Arial字體,所以你見到的H都是Arial,包括MATLAB和WORD裡面的字體,我一開始想把字體文件直接移植過來… 後來發現word的字體文件裡面根本沒有H字體,那他咋實現Helvetica字體的?問就是Arial。坑。我吐了,想到這感覺被騙了許多年。
好了,到此結束。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved