Matplotlib中文亂碼


    想要分析一批數據,畫出圖形會比較直觀。所以就搜索了一下各種軟件,最終選擇使用python的matplotlib。原因也是因為python使用起來比較方便,雖然R才是分析數據的首選,不過,沒有R的基礎,所以也就不再嘗試了。

    首先要說它的安裝,本來想在它的官網上下載來安裝,無奈,始終無法進行下載。最終,無意間發現了Unofficial Windows Binaries for Python Extension Packages,里面的庫很全,在進行安裝時,所提示缺少的庫,在其上面都能夠找到,不錯。安裝不用多說了,首先是有一款python,然后就是找屬於它的matplotlib、numpy等等。我為了方便,都是在上面給出的網站,下載的exe程序,只要點擊安裝即可。

    安裝完成后,便嘗試畫圖,起初也沒有什么問題,直至嘗試向圖片中添加中文,便有亂碼出現。網上的主流方法是修改matplotlibrc文件,如下:

1,找到

#font.family          : sans-serif

去掉注釋

2,找到

#font.sans-serif     : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

修改為

font.sans-serif     : Microsoft YaHei ,Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

即去掉注釋,並在配置值中添加 Microsoft YaHei ,

3,在windows下搜索msyh.ttf,即微軟的雅黑字體,

並將msyh.ttfcopy到python按照目錄下的

x:/install_dir/Lib/site-packages/matplotlib/mpl-data/fonts/ttf

目錄

其中x:/install_dir是python的安裝目錄

我在按上述操作的時候,遇到的問題:首先是在整個電腦全盤搜索都沒有發現msyh.ttf文件,倒是將Microsoft YaHei UI 字體文件拷貝到python相應目錄下的時候發現msyh.ttf,不過按照同樣的方法,把fontlist.cache中對應的Microsoft YaHei的值改為msyh.ttc也是徒勞。把msyh.ttc拷貝到python路徑下的ttf文件夾下也是不行。后來,有嘗試使用楷體的ttf文件:在fontlist.cache中搜索楷體ttf文件對應的變量名‘KaiTi’,然后在也是按照上述的步驟操作,在matplotlibrc中修改也是徒勞。

下面是另一種方法:(解決matplotlib圖像中文顯示問題

1. 找到matplotlib安裝目錄,比如C:\Development\python26\Lib\site-packages\matplotlib\mpl-data目錄下的matplotlibrc文件,找到#font.sans-serif     : …這一行,把后面的修改為’nothing’,這樣做是強制讓系統無法找到英文字體,而是用matplotlib默認字體Vera.ttf替換(不做這一步,我測試了也是可以的!)

1
#font.sans-serif     : nothing

2. 同個文件中找到#verbose.level  : silent這行。把silent修改為debug,這樣做是為了看更詳細的輸出.(不做這一步,我測試了也是可以的!)

1
#verbose.level  : debug

3. 找到字體目錄C:\Development\python26\Lib\site-packages\matplotlib\mpl-data\fonts\ttf下的Vera.ttf。這里我們用中文楷體可以從windows/system32/fonts拷貝過來,直接張貼到前面的ttf目錄下,然后更名為Vera.ttf,相當於用中文的字體替換掉之前的英文字體,偷龍轉鳳!!

4. 程序中指定文件編碼# -*- coding: utf-8 -*- ,並且確保要輸出的中文是unicode形式,檢查是否為unicode代碼:isinstance(s, unicode)。

上述操作,其實只要將Vera.ttf文件替換掉即可,不用修改matplotlibrc文件也是可行的。只是擔心以后會有什么副作用。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM