1 問題提出
使用圖1所示的代碼進行matplotlib繪圖時,因為其默認不支持中文,此時無法顯示正確內容,如圖2所示。
圖1 matplotlib繪圖繪圖代碼
圖2 ?matplotlib無法顯示中文
2 問題解決
2.1 設置全局字體
在圖1所示的代碼中,第13-15行分別設置了matplotlib繪制圖的標題、橫坐標標簽和縱坐標標簽,如果顯示以上內容的字體是相同的,則可以通過設置全局字體的方式來解決顯示漢字問題。
2.1.1 創建字體類FontProperties的實例
字體類FontProperties在matplotlib.font_manager模塊中定義,該類用來存儲和處理字體的屬性,通過創建其實例來指定使用的字體字號等屬性,代碼如圖3所示。
圖3 創建字體類FontProperties實例的代碼
其中,第4行代碼從matplotlib.font_manager模塊中導入FontProperties類;第5行代碼指定字體文件的位置;第6行代碼創建了FontProperties類的實例font,使用font_path指定的字體文件,字體大小是15。
相關鏈接1 Windows10系統中的字體文件位置是“C:\\Windows\\Fonts”,可以在該位置上選擇系統中已經安裝好的字體文件。
注意1 圖3中第5行代碼使用自定義的字體文件1.ttf,因為指定的是相對路徑,該字體文件應當與源代碼文件在同一路徑下。
2.1.2 設置matplotlib使用的字體參數
Matplotlib 使用rcParams來控制各種默認參數,rcParams['font.family']表示使用的字體。設置matplotlib使用的字體參數的代碼如圖4所示。
圖4 設置matplotlib使用的字體參數的代碼
第8行代碼導入matplotlib模塊,第9行代碼將rcParams['font.family']設置為font.get_name()的返回值,font即為圖3中創建的FontProperties實例,通過該實例調用的get_name()方法獲取到的是圖3中指定的字體名。
2.1.3 代碼運行效果
通過以上設置之后,代碼運行效果如圖5所示。
圖5 代碼運行效果
2.2 設置局部字體
如果matplotlib繪制圖的標題、x軸標簽和y軸標簽使用不一樣的字體,此時可以通過設置局部字體來實現。
2.2.1 定義局部字體
設置局部字體的代碼如圖6所示。
圖6 設置局部字體的代碼
其中,第5-6行設置了用于顯示標題的字體title_font;第7-8行設置了用于顯示x軸標簽的字體x_font;第9-10行設置了用于顯示y軸標簽的字體y_font。
2.2.2 設置字體
使用如圖7所示的代碼為不同的標簽設置不同的字體。
圖7 設置字體的代碼
為set_title()、set_xlabel()和set_ylabel()方法添加fontproperties參數,并將該參數設置為圖6中創建的不同字體。
2.2.3 代碼運行效果
設置不同字體的代碼運行效果如圖8所示。
圖8 代碼運行效果