對於復式折線圖來說,應該為每條折線都添加圖例,此時可以通過 legend() 函數來實現。
對於該函數可傳入兩個 list 參數,其中第一個 list 參數(handles 參數)用於引用折線圖上的每條折線;第二個 list 參數(labels)代表為每條折線所添加的圖例。
有什麼python相關報錯解答自己不會的、或者源碼資料/模塊安裝/
女裝大佬精通技巧都可以來這裡:(https://jq.qq.com/?_wv=1027&k=dwzSWSBK)或者+V:python10010問我
下面程序示范了為兩條折線添加圖例:
上面程序在調用 plot() 函數繪制折線圖時,
獲取了該函數的返回值。
由於該函數的返回值是一個列表,
而此處只需要獲取它返回的列表的第一個元素(第一個元素才代表該函數所繪制的折線圖),
因此程序利用返回值的序列解包來獲取。
上面程序中,第 11 行代碼用於為 ln2、ln1 所代表的折線添加圖例(按傳入該函數的兩個列表的元素順序一一對應),
其中 loc 參數指定圖例的添加位置,該參數支持如下參數值:
‘best’:自動選擇最佳位置。
‘upper right’:將圖例放在右上角。
‘upper left’:將圖例放在左上角。
‘lower left’:將圖例放在左下角。
‘lower right’:將圖例放在右下角。
‘right’:將圖例放在右邊。
‘center left’:將圖例放在左邊居中的位置。
‘center right’:將圖例放在右邊居中的位置。
‘lower center’:將圖例放在底部居中的位置。
‘upper center’:將圖例放在頂部居中的位置。
‘center’:將圖例放在中心。
運行上面程序,將會發現應程序並沒有繪制圖例,
這是因為 Matplotlib 默認不支持中文字體。
如果希望在程序中修改 Matplotlib 的默認字體,
則可按如下步驟進行:
使用 matplotlib.font_manager 子模塊下的 FontProperties 類加載中文字體。
在調用 legend() 函數時通過 prop 屬性指定使用中文字體。
將上面程序中第 11 行代碼改為如下幾行代碼:
上面程序使用 FontProperties 類來加載 C:Windows\Fonts\simkai.ttf 文件所對應的中文字體,
因此需要保證系統能找到該路徑下的中文字體。
再次運行上面程序,將看到如圖 1 所示的效果。
在使用 legend() 函數時可以不指定 handles 參數,只傳入 labels 參數,這樣該 labels 參數將按順序為折線圖中的多條折線添加圖例。因此,可以將上面第 5 行代碼改為如下形式:
plt.legend(labels=[‘Java基礎’,‘Android基礎’],
loc=‘lower right’,prop=my_font)
上面代碼只指定了 labels 參數,該參數傳入的列表包含兩個字符串,其中第一個字符串將作為第一條折線(虛線)的圖例,第二個字符串將作為第二條折線(短線、點相間的虛線)的圖例。
Matplotlib 也允許在調用 plot() 函數時為每條折線分別傳入 label 參數,這樣程序在調用 legend() 函數時就無須傳入 labels、handles 參數了。例如如下程序:
上面程序在調用 plot() 函數時傳入了 label 參數,這樣每條折線本身己經具有圖例了,因此程序在調用 legend() 函數生成圖例時無須傳入 labels 參數。
正如從上面程序中所看到的,每次繪制中文內容時都需要設置字體,那麼是否能改變 Matplotlib 的默認字體呢?答案是肯定的。在 Python 的交互式解釋器中輸入如下兩行命令:
import matplotlib
matplotlib.matplotlib_fname()
‘D:\Python\Python36\lib\site-packages\matplotlib\mp1-data\matplotlibrc’
其中 matplotlib_fname() 函數會顯示 Matplotlib 配置文件的保存位置,此處顯示該文件的存儲路徑為 D:\Python\Python36\lib\site-packages\matplotlib\mpl-data\matplotlibrc。打開該文件,找到如下這行代碼:
#font.family:sans-serif
上面這行代碼用於配置 Matplotlib 的默認字體,取消運行配置代碼之前的注釋符號(#),並將後面的 sans-serif 修改為本地己有的中文字體。例如使用微軟雅黑字體,只要將上面的配置代碼修改為如下形式即可:
font.family: Microsoft YaHei
通過上面設置,即可改變 Matplotlib 的默認字體,這樣即可避免每次調用 legend() 函數時都需要額外指定字體。
有什麼python相關報錯解答自己不會的、或者源碼資料/模塊安裝/
女裝大佬精通技巧都可以來這裡:(https://jq.qq.com/?_wv=1027&k=dwzSWSBK)或者+V:python10010問我