:詳解Matplotlib中文字符顯示問題-經驗觀點免费ppt模版下载-道格办公

詳解Matplotlib中文字符顯示問題

在Matplotlib中解決中文字符顯示問題有多種方法。以下是幾種常用的解決方案:1. 使用系統內置的中文字體:Matplotlib會使用默認的字體進行繪圖,但默認字體可能不支持中文字符。可以通過設置系統內置的中文字體來解決顯示問題。以下是一個示例:```pythonimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 設置字體為中文字體plt.rcParams['axes.unicode_minus'

在用matplotlib進行繪圖時,如果在繪製過程中會用到中文,則默認情況下會出現字體警告,中文字符顯示為方框或亂碼的形式,我們這裡將介紹多種解決方案。


02

目錄:

  • 1.中文字體顯示問題

  • 2.幾種解決方案

    • 2.1.在繪圖代碼中設置全局字體

    • 2.2.在繪圖代碼中設置局部字體

    • 2.3.修改本機字符默認配置字體

    • 2.4.自動區別系統然後選擇字體

  • 3.其他

    • 3.1.platform模塊

    • 3.2.常見中文字體文件名

1.中文字體顯示問題

在用matplotlib進行繪圖時,如果在繪製過程中會用到中文,則默認情況下會出現字體警告,中文字符顯示為方框或亂碼的形式,具體見下方案例:

import matplotlib.pyplot as plt
import< /span> numpy as np

# Data for plotting
t = np.arange(-1.0, < span >1.0
0.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = plt.subplots()
ax.plot(t, s)
ax.set(xlabel='時間 (s)', ylabel ='voltage (mV)',
       title='簡單的標題')

plt.show()
中文亂碼
C:UsersGdcanaconda3libsite-packagesmatplotlibackendsackend_agg.py:238: RuntimeWarning : Glyph 31616 missing from current font.
  font.set_text(s, 0.0, flags=flags)
...

我們可以看到在警告信息中提示“missing from current font”,直譯就是“在當前字體中缺少(中文字符)”,大概含義就是默認的字體中不含中文字符。

對於這類問題,核心就是設置繪製圖片時的字體參數包含全部的需要用到的字符

2.幾種解決方案

我們在解決中文字符顯示問題時,有兩類方案多種方式:方案1,在繪圖代碼中設置全局字符顯示字體;方案2,在繪圖代碼中設置局部字體;方案3,修改本機字符默認配置的字體。

2.1.在繪圖代碼中設置全局字體

rcParams修改font.sans-seriffont.family 對應字體

# 以下代碼從全局設置字體為SimHei(黑體),解決顯示中文問題【Windows】< br># 設置font.sans-serif 或 font.family 均可
plt.rcParams['font.sans-serif'] = [' SimHei']
# plt.rcParams['font.family']=['SimHei']
# 解決中文字體下坐標軸負數的負號顯示問題
plt.rcParams['axes.unicode_minus'] = False 

由於mac電腦默認沒有SimHei(黑體)字體,大家可以下載安裝該字體或者修改為系統自帶的字體如Arial Unicode MS,如下:

# 以下代碼從全局設置字體為Arial Unicode MS,解決顯示中文問題【mac】
# 設置font.sans-serif 或 font.family 均可
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# plt.rcParams['font.family']=['Arial Unicode MS']
# 解決中文字體下坐標軸負數的負號顯示問題
plt.rcParams['axes.unicode_minus'] = False 

rc方法,其實和設置rcParams 基本等效

# 設置font字典為 SimSun(宋體),大小為12(默認為10)
font = {'family' : 'SimSun',
        'size'  : '12'}
# 設置 字體
plt.rc('font', **font)
# 解決中文字體下坐標軸負數的負號顯示問題        
plt.rc('axes', unicode_minus=False

!! 比如:rc('lines', linewidth=2, color=' r')等效於以下:

rcParams['lines.linewidth'] = 2
rcParams['lines.color'] = < span >'r'

2.2.在繪圖代碼中設置局部字體

FontProperties對象,這種情況下不需要額外處理負號問題

import matplotlib.pyplot as plt
import< /span> numpy as np
# 引入matplotlib字體管理 FontProperties
from matplotlib.font_manager import FontProperties

# 設置我們需要用到的中文字體(字體文件地址)
my_font = FontProperties(fname=r'c:windowsfontsSimHei.ttf'< /span>, size=12)
# Data for plotting
t = np.arange(-1.01.00.01)
s = 1 + np.sin(2 * np.pi * t)< br>
plt.plot(t, s)

# 設置 x軸名稱字體
plt.xlabel('時間 (s)', fontproperties=my_font)
plt.ylabel('voltage (mV)')
# 設置 標題字體
plt.title(< span >'簡單的標題'
, fontproperties=my_font)

plt.show()
FontProperties對象

直接設置fontproperties參數,這種情況下也不需要額外處理負號問題

import matplotlib.pyplot as plt
import< /span> numpy as np

# Data for plotting
t = np.arange(-1.0, < span >1.0
0.01)
s = 1 + np.sin(2 * np.pi * t)

plt.plot(t, s)

# 設置 x軸名稱字體 黑體 SimHei
plt.xlabel('時間 (s) ', fontproperties='SimHei')
plt.ylabel('voltage (mV)')
# 設置 標題字體微軟雅黑 Microsoft YaHei
plt.title('簡單的標題', fontproperties='Microsoft YaHei')

plt .show()
fontproperties參數

2.3.修改本機字符默認配置字體

除了以上的在代碼中進行字體設置外,我們還可以直接修改本機字符默認配置字體,不過這種情況下代碼只在本機適用咯。

In [1]: # 查看配置地址
   .. .: import matplotlib
   ...: print(matplotlib.matplotlib_fname())
C:UsersGdcanaconda3libsite-packagesmatplotlibmpl-datamatplotlibrc

在以下地方#font.sans-serif新增支持中文字符的字體如:SimSun(宋體),也可以直接修改#font.family:  SimSun

!! #font.family:  sans-serif#font.sans-serif: SimSun,

考慮到 中文字體下 負號的顯示問題,同步需要修改#axes.unicode_minus: False

修改True為False

2.4.自動區別系統然後選擇字體【方便】

核心是以下代碼:

(引用platform模塊獲取當前系統 mac or windows ,然後自動選擇相應中文字體)

# 根據不同的操作系統設置對應的中文字體(蘋果系統和Windows系統)< /span>system_font = {'Darwin': 'Arial Unicode MS', 'Windows': 'SimHei' }plt.rcParams['font.family'] = [system_font. get(platform.system())]
import matplotlib.pyplot as plt
import numpy as np
import platform

# 根據不同的操作系統設置對應的中文字體(蘋果系統和Windows系統)
system_font = {'Darwin''Arial Unicode MS''Windows''SimHei'}
plt.rcParams['font.family'] = [system_font.get(platform.system())]
# 解決中文字體下坐標軸負數的負號顯示問題< /span>
plt.rcParams['axes.unicode_minus'] = False 

# Data for plotting< br>t = np.arange(-1.01.00.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = plt.subplots()
ax.plot(t, s)

ax.set(xlabel='時間 (s)', ylabel='voltage (mV)',
       title='簡單的標題' )

plt.show()
中文字符顯示

3.其他

這裡我們簡單介紹獲取操作系統相關信息的模塊platform和常見的中文字體的字體文件名信息,方便大家理解!

3.1.platform模塊

platform模塊給我們提供了很多方法去獲取操作系統的相關信息。

!! 參考文檔:https://docs.python.org/3/library/platform.html

In [1]: import platform

In [2]: platform.system()
Out[2]: 'Windows'

In [3]: platform.platform()
Out[3]: 'Windows-10-10.0.18362-SP0'

In [4]: platform.version()
Out[4]: '10.0.18362'

In [5]: platform.architecture()
Out[5]: ('64bit''WindowsPE')

In [6]: platform.machine()
Out[6]: 'AMD64'

In [7]: platform.node()
Out[7]: 'Gdc-PC'

In [8]: platform.processor()
Out[8]: 'Intel64 Family 6 Model 94 Stepping 3, GenuineIntel'

In [9]: platform.uname()
Out[9]: uname_result(system='Windows', node='Gdc-PC', release='10', version=< span >'10.0.18362', machine='AMD64', processor='Intel64 Family 6 Model 94 Stepping 3, GenuineIntel')
< /code>

3.2.常見中文字體文件名

< table>中文字體字體文件名稱宋體SimSun黑體SimHei 微軟雅黑Microsoft YaHei微軟正黑體Microsoft JhengHei新宋體NSimSun新細明體PMingLiU細明體MingLiU標楷體DFKai-SB< tr >仿宋FangSong楷體 KaiTi隸書LiSu幼圓YouYuan華文細黑STXihei華文楷體STKaiti華文宋體 STSong華文中宋STZhongsong華文仿宋STFangsong方正舒體FZShuTi方正姚體< td >FZYaoti華文彩雲STCaiyun華文琥珀STHupo 華文隸書STLiti華文行楷STXingkai華文新魏STXinwei




往期推薦

    < li >

    Pandas處理字典和json數據的幾個方法

  • 王者榮耀五週年,帶你入門Python爬蟲基礎操作(102個英雄+326款皮膚).



< span > 默默關注才哥

然後驚艷所有人

可以叫我才哥


                 我就知道你在看!

文章為用戶上傳,僅供非商業瀏覽。發布者:Lomu,轉轉請註明出處: https://www.daogebangong.com/zh-Hant/articles/detail/Detailed%20explanation%20of%20Matplotlib%20Chinese%20character%20display%20problem.html

(810)
打賞 支付宝扫一扫 支付宝扫一扫
single-end

相關推薦