Linux Ubuntu 16.04 Python matplotlib安裝中文字體,黑體,楷體,Times New Roman等,解決中文亂碼

Linux Ubuntu 16.04 Python matplotlib安裝中文字體,Times New Roman等


當我們在Ubuntu Linux下使用Python matplotlib畫圖時,會發現不能用Times New Roman,楷體,黑體等Windows上常用的字體,尤其是用中文顯示圖標籤時,會出現小方框/塊,這是因爲Linux下本身不自帶這些常用字體(因爲版權原因)。因此需要我們自己動手裝,本人查找了了網上好多篇用時一天,,總之一言難盡,最後終於整好了。記錄下了特別詳細了的步驟,以供需要之人蔘考。絕對可靠。

一、用apt-get工具安裝Times New Roman字體,即安裝ttf-mscorefonts-installer,但此字體包,不包括楷體,黑體等。

如果只需用Times New Roman字體,可以參見本人此篇博客。 Ubuntu下安裝Times New Roman字體.

二、將Windows下的黑體,楷體等安裝到Ubuntu及matplotlib下。

上面提到mscorefonts這個字體包裏不包含楷體黑體等,因此需要將Windows下的字體安裝到Ubuntu下。下面以安裝黑體爲例,講解具體步驟,學會一種,其它字體一樣。

首先在Windows下,進入C:\Windows\Fonts目錄,找到你想要的字體,即黑體,拷貝到一個新建文件夾,如本人命名的winfonts。如下兩圖
圖1
在這裏插入圖片描述

三、將上面拷貝的字體上傳到Ubuntu系統(注意Linux系統權限問題

本人用的Xshell和Xftp。在這一步,一直在上傳到Ubuntu時,不成功,終於想到是權限問題。如下圖,提示權限不夠,第一次碰到Xftp上傳不成功。。。正好Xftp5還強制更新,還以爲這軟件不更新用不了上傳功能了,不過因爲這次上傳問題,讓我發現要注意到Linux普通用戶是不能改動根目錄下文件夾,會提示權限不夠。如下圖,失敗case。
在這裏插入圖片描述
這種情況,就是你直接把Windows下文件拷貝到Ubuntu虛擬機的/usr/share/fonts目錄時,權限不夠。查看/usr/share/fonts的權限如下
在這裏插入圖片描述
可以看到,普通用戶是無法向這個目錄寫入文件的。因此我用su root命令切換到超級用戶,發現竟然還是這個錯誤,不清楚爲什麼,各位博友,有清楚的請在評論中指出。但是,問題總會有多種方法解決的。不能直接上傳到根目錄下,那就先上傳到普通用戶下吧,也就是本人的家目錄。如下圖,在這裏插入圖片描述
可以看到終於成功了,很欣慰。。。
在這裏插入圖片描述
此時就好辦了,切換到root用戶將其拷貝到/usr/share/fonts目錄下即可,有三種方式,
1)第一種兩行代碼
sudo -i #或者用su root,都是切換到root用戶
cp -rf /home/rain/winfonts/ /usr/share/fonts
2)第二種一行代碼,不用切換到root用戶
sudo cp -rf winfonts/ /usr/share/fonts
3)第三種就是用戶界面方式操作,就是用root權限打開一個文件管理器窗口,這種就跟Windows操作一樣了,直接賦值粘貼即可。
sudo nautilus

到這裏,我們終於把文件拷貝到/usr/share/fonts目錄下了。如下圖,
在這裏插入圖片描述

四、刷新Ubuntu系統字體緩存,和matplotlib字體緩存(matplotlib的字體緩存也要刷新,matplotlib才能用,重要)

這一步該刷新字體緩存了。首先在Ubuntu上打開LibreOffice,看一下字體裏是沒有黑體的,如下圖
在這裏插入圖片描述
沒裝沒刷新之前當然沒有了!!
現在來用命令
sudo fc-cache -f -v
刷新Ubuntu字體緩存。如下圖可以看到在我們的目錄/usr/share/fonts/winfonts中找到一種新字體,就是咱們要安裝的黑體啊!!!
在這裏插入圖片描述
然後重新打開libreoffice,見證奇蹟的時刻!!!
在這裏插入圖片描述
我們的黑體終於能用了!!!到這裏,你會發現你想用其它的楷體,宋體,都可以按上面步驟安裝了。我在網上查到諸多博客,好多都。。。你們懂得,我用時一天終於自己摸索出來,特此記下來。希望對看到的你有所幫助。我們整理東西一定要自己驗證過,要把重要細節寫完美,否則,發到網上的都是垃圾內容。
在這裏插入圖片描述

五、接下來就是,刷新matplotlib字體緩存了。

首先看問題,如果在Ubuntu Linux下用matplotlib畫圖,如果沒有安裝中文字體。在中文處則顯示亂碼小方塊。如下圖
在這裏插入圖片描述
因此,我們要先安裝中文字體,步驟就是上面。但是經過剛剛明明看到我們已經安裝黑體,但是爲什麼還是顯示亂碼小方塊呢。就是沒有刷新matplotlib的字體緩存了。首先打開一個Python環境,找到matplotlib字體緩存目錄。如下代碼:
import matplotlib as plt
plt.get_cachedir()
本人機器上操作的如下圖,
在這裏插入圖片描述
直接用如下命令
rm -rf /home/rain/.cache/matplotlib
刪除這個緩存目錄就可以了。如下圖
在這裏插入圖片描述
接着在運行一下剛纔的畫圖程序,見證奇蹟的時刻到了!!!如下圖
在這裏插入圖片描述
在這裏插入圖片描述
到這裏,終於解決Ubuntu上Python matplotlib畫圖,用中文字體,simhei,times new roman的問題了。

六、但是,我發現竟然用楷體的時候有個問題

當在.py文件中用楷體時竟然還是小方塊???明明libreoffice裏面已經可以用了。難道是引用字體名不對?如下圖:
在這裏插入圖片描述
在這裏插入圖片描述
看來的SimKai這個名字不對了,可以用如下命令看一下楷體的引用名是什麼:
import matplotlib as plt
import matplotlib.font_manager as font_manager
fontpath = '/usr/share/fonts/truetype/msttcorefonts/simkai.ttf'
prop = font_manager.FontProperties(fname=fontpath)
print(prop.get_name())
結果如下圖,竟然叫‘KaiTi’而不是‘SimKai’????
在這裏插入圖片描述
在.py文件中更證名字,然後又到了見證奇蹟的時刻!!如下圖
在這裏插入圖片描述
在這裏插入圖片描述
到這裏你終於學到如果解決Ubuntu Python matplotlib畫圖中所以字體問題了,真是百轉千折,但是你也深入瞭解了Linux許多原理,對於需要經常用Linux的你還是非常有幫助,如果你只需要用Python做機器學習換圖,建議還是用windows+Anaconda+PyCharm+Notebook吧,不會遇到這麼多配置問題,實力勸退一波哈哈。


七、參考文獻

[1] https://blog.csdn.net/u014712482/article/details/80568540
[2] https://www.zhihu.com/question/25404709

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章