如何在AI Studio數據可視化圖像中顯示漢字

2021-02-19 老齊教室

作者:燕清,老齊

與本文相關的圖書推薦:《跟老齊學Python:數據分析》

AI Studio是一個非常好用的數據科學在線實驗平臺,不論是教學、學習還是開發,都可以使用。但是,下面的缺憾未免成為了珍珠上的一點瑕疵。

%matplotlib inline
import matplotlib.pyplot as plt

labels = ['娛樂','育兒','飲食','房貸','交通','其它']
sizes = [2,5,12,70,2,9]
explode = (0,0,0,0.1,0,0)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=150)
plt.title("餅圖示例-8月份家庭支出")

輸出結果:

在繪製這個餅圖的時候,我們在標題以及餅圖不同區域的標籤設置了中文,但是現實效果不能令人滿意,沒有顯示相應的漢字。很多人遇到過這種問題,一種常見解決之道就是「繞著走」,將中文換成英文,乃至於在某些官方的案例中也是如此。

專業的開發者天生就是「以解決難題為榮」的,這個難題必須要破解。

如果在網上搜索Matplotlib顯示漢字的問題,會有好多種方法,但是那些方法都是針對本地作業系統的,而非針對Ai Studio這樣的遠程系統——雖然也是Ubuntu作業系統,但是由於每個人使用的是一個虛擬環境,在權限、路徑等方面與本地作業系統還是有所差別的。

查看已有字體

在開始解決問題之前,先對當前我們使用的虛擬作業系統以及它已有字體有所了解。

!cat /etc/*-release

輸出:

    DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"
NAME="Ubuntu"
VERSION="16.04.3 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.3 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

從上述結果,我們了解到,現在所使用的Ai Studio是Ubuntu作業系統。因此,各種Linux命令就可以放心使用了。

首先看一看系統自帶的字體。

# Linux系統默認字體文件路徑
!ls /usr/share/fonts/

輸出:

cmap  truetype	type1  X11

顯然作業系統默認有一些字體,但這些字體中有多少是支持顯示漢字的呢?還要繼續查看:

# 查看系統可用的ttf格式中文字體
!fc-list :lang=zh | grep ".ttf"

沒有任何查詢結果,說明系統默認字體中沒有支持漢字的ttf格式字體。

熟悉Matplotlib的朋友可能會想到,也應該看看Matplotlib庫的字體目錄,或者將支持漢字的字體放到該目錄中。

Ai Studio雖然是Ubuntu作業系統,但又不完全等同於本地的Ubuntu系統,Python第三方庫的安裝位置與本地計算機中的位置不同。

import matplotlib
matplotlib.__path__

輸出:

['/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib']

以上的輸出結果:/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib,就是matplotlib的存儲路徑,或者說,所有第三方包都會被安裝到/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/裡面。

那麼,Matplotlib保存字體的路徑就應該是/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf,可以查看其中的字體:

# matplotlib字體路徑(aistudio)
!ls /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf

輸出:

    cmb10.ttf			DejaVuSerif.ttf
cmex10.ttf LICENSE_STIX
cmmi10.ttf STIXGeneralBolIta.ttf
cmr10.ttf STIXGeneralBol.ttf
cmss10.ttf STIXGeneralItalic.ttf
cmsy10.ttf STIXGeneral.ttf
cmtt10.ttf STIXNonUniBolIta.ttf
DejaVuSans-BoldOblique.ttf STIXNonUniBol.ttf
DejaVuSans-Bold.ttf STIXNonUniIta.ttf
DejaVuSansDisplay.ttf STIXNonUni.ttf
DejaVuSansMono-BoldOblique.ttf STIXSizFiveSymReg.ttf
DejaVuSansMono-Bold.ttf STIXSizFourSymBol.ttf
DejaVuSansMono-Oblique.ttf STIXSizFourSymReg.ttf
DejaVuSansMono.ttf STIXSizOneSymBol.ttf
DejaVuSans-Oblique.ttf STIXSizOneSymReg.ttf
DejaVuSans.ttf STIXSizThreeSymBol.ttf
DejaVuSerif-BoldItalic.ttf STIXSizThreeSymReg.ttf
DejaVuSerif-Bold.ttf STIXSizTwoSymBol.ttf
DejaVuSerifDisplay.ttf STIXSizTwoSymReg.ttf
DejaVuSerif-Italic.ttf

查看上面的顯示結果,會發現,的確沒有支持漢字顯示的字體,所以,前面可視化結果中不能顯示漢字是很正常的。

按照在本地計算機上設置漢字顯示的思維方法,將支持漢字顯示的字體放到上述目錄中,並修改相應的配置文件matplotlibrc,是否可以?如果讀者有興趣,可以嘗試。這裡只說明結果:無法解決本文的問題。

下載字體

既然系統默認沒有支持漢字的字體,就不得不下載了。注意,不是下載到你所使用的本地計算機,而是下載到當前Ai Studio給我們提供的虛擬作業系統上。

# 下載中文字體
!wget https://mydueros.cdn.bcebos.com/font/simhei.ttf

輸出:

    --2020-04-10 15:44:35--  https://mydueros.cdn.bcebos.com/font/simhei.ttf
Resolving mydueros.cdn.bcebos.com (mydueros.cdn.bcebos.com)... 182.61.128.198
Connecting to mydueros.cdn.bcebos.com (mydueros.cdn.bcebos.com)|182.61.128.198|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9753388 (9.3M) [application/octet-stream]
Saving to: 『simhei.ttf.1』

simhei.ttf.1 100%[===================>] 9.30M 54.7MB/s in 0.2s

2020-04-10 15:44:35 (54.7 MB/s) - 『simhei.ttf.1』 saved [9753388/9753388]

字體下載之後,會保存到當前項目的永久文件夾中。點擊界面左側的「文件夾」,可以看到剛剛下載的字體文件simhei.ttf,再用下面的方式得到這個字體的名稱。

# 查看字體的引用名
import matplotlib.font_manager as font_manager
fontpath = 'simhei.ttf'
prop = font_manager.FontProperties(fname=fontpath)
print(prop.get_name())

輸出:

    SimHei

從上述返回結果可知,下載的字體文件simhei.ttf,在Matplotlib中,所引用的字體名稱是SimHei。

第一種方法

這是一種非常靈活的方法,可以根據需要對所繪製圖像設置不同的字體。

%matplotlib inline
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

font = FontProperties(fname='simhei.ttf', size=16) # 創建字體對象

labels = ['娛樂','育兒','飲食','房貸','交通','其它']
sizes = [2,5,12,70,2,9]
explode = (0,0,0,0.1,0,0)

plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=150, textprops={'fontproperties':font})

plt.title("餅圖示例-8月份家庭支出", fontproperties=font)

輸出:

觀察上述圖示,標題和餅圖的各個分區的標示都顯示中文了。

在plt.pie和plt.title中,都是用了參數'fontproperties',這個參數是matplotlib的文本參數之一(查看:Text properties and layout:https://matplotlib.org/3.1.1/tutorials/text/text_props.html),其值是FontProperties類的實例,即前面所創建的字體對象。

如此解決了當前圖示中漢字顯示問題。

第二種方法

第一種方法定製性比較強,在一個項目中,可以給不同圖示配置不同的字體。如果不需要如此,也可以用這裡介紹的第二種方法,一個項目中所有可視化的圖示都用同一種漢字字體。

在創建共本項目應用的字體目錄fonts,並把所下載的字體放到該目錄中。

#創建字體目錄fonts
!mkdir .fonts

# 複製字體文件到該路徑
!cp simhei.ttf .fonts/

上面的操作完成之後,一定要執行下面的操作:

重啟環境,即用滑鼠點擊本項目瀏覽器中的下圖所示圖標:

這步完成之後,執行下面的代碼,就實現了漢字的顯示。

%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager

# 設置顯示中文
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體
matplotlib.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題

labels = ['娛樂','育兒','飲食','房貸','交通','其它']
sizes = [2,5,12,70,2,9]
explode = (0,0,0,0.1,0,0)
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)
plt.title("餅圖示例-8月份家庭支出")

輸出:

以上技巧,發布出來,供大家參考。

搜索技術問答的公眾號:老齊教室

」★

在公眾號中回覆:老齊,可查看所有文章、書籍、課程。

覺得好看,就點這裡👇👇👇

相關焦點

  • 請牢記這5個高效的數據可視化技巧丨Data Studio
    你會選擇先創建一個報告,然後【複製】,最後【批量更改連接的數據源】,這就是一個小技巧,只不過在日常生活中經常使用,也就不足為奇了。Data studio作為Google系中重要的可視化工具,日常出報告、看數據都離不開它。其本身具有很多便捷的功能,比如支持多人協作、多種圖表供選擇、連接多種數據源、數據整合、計算欄位等。此外,還隱藏了很多超實用的功能技巧,能夠幫助我們提高工作效率。
  • 從工業大數據分類中,看懂觸控顯示設備實現生產製造可視化過程!
    總的來說,工業大數據主要來源於機器設備數據、工業信息化數據和產業鏈相關數據三大方面。那麼,在智能工廠衍生出的龐大工業數據中,製造企業如何有效利用大數據提高生產效率和管理?這就涉及到工業大數據如何有效可視化的問題。
  • 【數據可視化】新冠疫情數據可視化
    import Linefrom pyecharts.charts import Pieimport warningswarnings.filterwarnings("ignore")data = pd.read_csv('D:\\Course\\數據可視化\\我的數據可視化2\\COVID_19_data_China.csv',encoding
  • CNN卷積特徵的可視化
    本文主要是實現了一個簡單的卷積神經網絡,並對卷積過程中的提取特徵進行了可視化.    權值共享:      在卷積層中可以有多個卷積核,每個卷積核與原始圖像進行卷積運算後會映射出一個新的2D圖像,新圖像的每個像素都來自同一個卷積核.這就是權值共享.
  • 零基礎入門深度學習(六):圖像分類任務之LeNet和AlexNet
    上一節主要介紹了卷積神經網絡常用的一些基本模塊,本節將基於眼疾分類數據集iChallenge-PM,對圖像分類領域的經典卷積神經網絡進行剖析,介紹如何應用這些基礎模塊構建卷積神經網絡,解決圖像分類問題。
  • 數據可視化設計系列(1): 數據可視化的定義
    數據作為未來的主流媒體信息,在信息爆炸的現代,總歸需要一些革新的呈現方式,以便於大眾消化。既然談到革新的方式,此刻該是邀請可視化這個老朋友入座了。什麼是可視化?可視化就是我們轉述遊戲中最佳的下一環。可視化的傳承歷史和文字一般悠久。我們為什麼這麼持之以恆地訴諸於將信息轉化成視覺元素的技巧呢?因為人類對視覺信息的處理方式是我們所有感官中最為特殊的。當面對圖像信息時,我們的感知系統會平行(同時)處理視覺信息,這個處理過程是發生在「前知覺」(preconscious level)的。
  • Grid studio表格應用程式:Python的集大成者
    這就是滿足數據科學需求,建立一個能將工作流集合到一個簡單、現代化並易於操作的應用程式中的工具的原因。程序如何工作?Grid studio是一個基於網頁的應用程式,看起來和普通的電子表格程序十分相似,比如 Google Sheets和Microsoft Excel。然而,其殺手鐧就是Python語言的深度集成。
  • 「乾貨」產品經理教你用Python+Flourish搞掂超酷的數據可視化
    在線可視化:https://app.flourish.studio/login2數據獲取歷史數據可以從WHO(權威)、各國官方發布的數據、科研院校數據,像約翰霍普金斯學院(https://coronavirus.jhu.edu/map.html),數據實時更新
  • 27 張 AI 超全速查表,神經網絡、機器學習、數據可視化一應俱全(附完整 pdf)
    在機器學習、深度學習研究中,優秀的參考資料和手冊往往能夠助我們事半功倍!今天小編給大家整理了 27 張非常全面的 AI 速查表,以便供大家平時查詢所用!這 27 張速查表內容非常全面,涉及神經網絡、機器學習、深度學習、Python 及其開源庫、數據可視化等。下面,我們分別來詳細介紹。1. 神經網絡基礎
  • 10種免費的工具讓你快速的、高效的使用數據可視化
    然而,對於任何想要可視化來伴隨他們的文章的人來說,它都非常有用。該網站還辦了名為CHARTABLE的博客,他們定期撰寫有關數據可視化的最佳實踐。處理只需從Excel或Google表格中複製您的數據即可。您還可以上傳CSV文件或連結到URL以獲取實時更新圖表。
  • 百度飛槳發布工業級圖像分割利器PaddleSeg
    圖像分割是什麼?圖像語義分割通過給出每一個圖像中像素點的標籤,實現圖像中像素級別的語義分割,它是由圖像處理到圖像分析的關鍵步驟。就像下圖中所看到的那樣,可以對車輛、馬路、人行道等實例進行分割和標記!相比於傳統的圖像分類任務,圖像分割顯然更難更複雜,但是,圖像分割是圖像理解的重要基石,在自動駕駛、無人機、工業質檢等應用中都有著舉足輕重的地位。3. PaddleSeg 三重驚喜3.1.
  • 零基礎怎麼玩轉數據可視化?看這份工具和技巧清單就夠了
    最近看到了一份領英的數據報告,報告顯示數據分析技能和數據可視化技能是過去一年在全球數據人才中增長最快的技能,前者增長速度約為150%,後者增速同樣超過100%,在國內市場,數據分析和數據可視化技能的佔比也依舊名列前茅。
  • 數據可視化與信息可視化怎麼搞?
    我們常常迷失在數據中,紛繁複雜的數據讓我們無所適從。可視化作為解決這問題的有效手段,通過視覺的方式讓數字易於理解。本文梳理了可視化相關內容,並且根據數據平臺組同仁們在可視化項目過程中使用經驗,總結一些可視化使用注意事項,與大家分享。
  • 當「讀圖」遇上「大數據」——新聞報導中的數據可視化分析
    21 世紀,大數據時代開啟了一次重大的時代轉型。在網際網路時代,可視化通過藉助計算機圖形、圖像的製作手段,清晰有效地展現出信息與數據挖掘的規律,強調美學與功能並重,以更為有效地表現信息。在新聞採寫領域,通過以圖像的直觀形式傳達關鍵特徵,從而實現對數據龐大、因素眾多、結構複雜的新聞進行深入分析與梳理。
  • 開源推薦:來自Google大腦團隊的19個數據可視化項目
    更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front)本文所介紹的數據可視化項目都可在 https://research.google.com/bigpicture/中找到。機器學習已經成為一個日益強大的工具,該工具可以應用到橫跨物體識別、語言翻譯、健康醫療等各種領域。
  • 15種獨一無二的創新數據可視化方式
    讀者可以根據該指南在R語言中創建交互圖: 如何在R中創建動圖以分析健康數據傳送門:https://www.analyticsvidhya.com/blog/2019/04/how-built-personalized-interactive-fitness-tracker-dashboard-r/?
  • 專業圖卡加速工程數據可視化
    數據可視化技術離不開專業圖卡    數據可視化(Data Visualization)技術指的是運用計算機圖形學和圖像處理技術,將數據換為圖形或圖像在屏幕上顯示出來,並進行交互處理的理論、方法和技術。它涉及到計算機圖形學、圖像處理、計算機輔助設計、計算機視覺及人機互動技術等多個領域。
  • 數據可視化的十大優點
    這是數據可視化的步驟,允許組織領導者實時訪問和解釋數據,以便他們能夠快速做出明智的決策。   數據可視化工具為技術、管理人員和其他知識工作者提供了新方法,可以顯著的提高他們掌握隱藏在數據中的信息的能力。
  • 飛槳框架高層API,一起輕鬆玩轉AI
    本示例的完整代碼可以在 AI Studio 上獲取,無需準備任何軟硬體環境即可直接在線運行代碼,相當方便哦:https://aistudio.baidu.com/aistudio/projectdetail/1243085一、數據預處理與數據加載對於數據加載,在一些典型的任務中,我們完全可以使用飛槳框架內置的數據集,
  • 教育科研中的數據可視化分析
    在科研實踐中,數據分析可幫助人們做出現狀、趨勢或相互關係的判斷,以便採取適當決策、制訂相關政策和開始行動。因此,它也是從事此類研究的科研人員的基本功。從圖線上還可以簡便求出需要的某些結果,讀出沒有進行觀測的對應點(內插法)或在一定條件下從圖線的延伸部分讀到測量範圍以外的對應點(外推法)。此外,還可以把某些複雜的函數關係,通過一定的變換用直線圖表示出來。在信息可視化如此流行的今天,以圖為表徵的數據的可視化分析自然也就越來越為人們所重視。數據可視化是數據分析工具最基本的要求。