解決Matplotlib中文亂碼問題

來源:互聯網
上載者:User

.找到

 代碼如下 複製代碼


#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替換 ( 不做這一步,我測試了也是可以的! )

 代碼如下 複製代碼


#font.sans-serif : nothing

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

 

 代碼如下 複製代碼
#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檔案也是可行的。只是擔心以後會有什麼副作用。。。


再整理一種辦法

1.修改matplotlibrc檔案

進入Python安裝目錄下的Lib\site-packages\matplotlib\mpl-data目錄,開啟matplotlibrc檔案,刪除font.family和font.sans-serif兩行前的#,並在font.sans-serif後添加微軟雅黑字型(Microsoft YaHei),代碼如下:

matplotlibrc檔案修改Python

 代碼如下 複製代碼

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

 
2.代碼中別忘了unicode編碼

matplotlib 範例程式碼Python

 代碼如下 複製代碼

import matplotlib.pyplot as plt
 
plt.clf()  # 清空畫布
plt.plot([1, 2, 3], [4, 5, 6])
plt.xlabel(u"橫軸")
plt.ylabel(u"縱軸")
plt.title("pythoner.com")<a href=""><img src="" alt="matplotlib樣本" width="300" height="226" class="alignnone size-medium wp-image-201" /></a>
plt.show()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.