一張完美的圖是這樣來的—Matplotlib

當在一張圖中包含大量數據和多個曲線時,線條的樣式,顏色等風格化的變量設置就顯得尤爲重要,今天我來總結一下在Matplotlib中常用的參數和用法。

首先我們先通過一個例子來看看,先導入繪圖所需要的數據

import pandas as pd
data = pd.read_csv("Added value of high-tech industry.csv")

再來定義一會兒要用到的變量

x = data['Years']
l1 = data['Actual']
l2 = data['GM(1,1)']
l3 = data['LSSVR']
l4 = data['ANN']
l5 = data['GLV']
l6 = data['FGLV']
l7 = data['FDGLV']

接下來,開始畫圖

import matplotlib.pyplot as plt   #導入matplotlib
fig, ax = plt.subplots(figsize=(8,4))
plt.title('Added value of high-tech industry')  #設置標題
plt.plot(x, l1,'bo',label='Actual Data')
plt.plot(x, l2,c='#EA4335',ls='-',label='GM(1,1)',linewidth=1)
plt.plot(x, l3,c='#960B4F',ls= '--',label='SSVR',linewidth=1)
plt.plot(x, l4,c='#34A853',ls='-.', label='ANN',linewidth=1)
plt.plot(x, l5,c='#24016F',ls=':', label='GLV',linewidth=1)
plt.plot(x, l6,c='#F78104',ls='--', label='FGLV',linewidth=1)
plt.plot(x, l7,c='#008081',ls='-', label='FDGLV',linewidth=1)

先講一下在上面這幾行代碼中提到的幾個元素:

  1. color (簡寫 ‘ c ‘)
    再多條曲線中顏色的選擇很重要,這裏我推薦一個不錯的網站:https://www.schemecolor.com, 裏面提供了大量的顏色和組合可供選擇可以直接複製,節省了很大的時間。

  2. linestyle(簡寫 ‘ ls ’)
    線條的樣式也是一個很重要的因素,目前官方提供的樣式有以下幾種
    實線: ‘-’
    虛線: ‘–’
    點線: ‘:’
    點: ‘.’
    虛點線: ‘-.’

3.linewidth(線寬),可以自己調整。
其實還有很多的參數可供設置,在這裏我不依依贅述,有興趣大家可前往matplotlib的官網:https://matplotlib.org,裏面有更詳細的講解和介紹。

接下來我們繼續看代碼

from matplotlib.pyplot import MultipleLocator    #導入設置時間的庫
x_major_locator = MultipleLocator(2)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
#設置x軸時間刻度顯示(2年顯示一次)
plt.xlabel('Years')  #x軸標籤
plt.ylabel('$10^9$  (¥)') #y軸標籤
plt.vlines(2019, -200, 8000, colors = "k", linestyles = "-",lw=0.8) #添加分割豎線
plt.text(2012,4400,'Data for building the model',fontsize=10,c='red') #添加文本註解
plt.text(2020,6500,'Trend prediction',fontsize=10,c='red')

其中關於垂直分割線的用法:

vlines(x, ymin, ymax)

x(豎線的橫座標),ymin(豎線縱座標的下限),ymax(豎線縱座標的上限)

接着我們來添加箭頭

ax.annotate('', xy=(2018,4500), xytext=(2019,4500),
            arrowprops=dict(arrowstyle="->", color="r"))
ax.annotate('', xy=(2020,6600), xytext=(2019,6600),
            arrowprops=dict(arrowstyle="->", color="r"))

xy爲箭頭的起始座標,xytext爲箭頭的終點座標,arrowprops來設置箭頭的屬性,arrowstyle是箭頭的形狀。

最後我們來設置圖例

plt.legend()
leg = plt.legend()
leg.get_frame().set_linewidth(0.0) #使圖例邊框爲透明色

同樣,如果想對圖例的位置進行設置,例如:
upper right 1
upper left 2
等…
可以使用(‘loc=#’)

最後

plt.show()

完整代碼如下:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator

data = pd.read_csv('Urbanization Rate.csv')

x=data['Years']
l1=data['Actual']
l2=data['GM(1,1)']
l3=data['LSSVR']
l4=data['ANN']
l5=data['GLV']
l6=data['FGLV']
l7=data['FDGLV']

fig, ax = plt.subplots(figsize=(8,4))
plt.title('Urbanization Rate')
plt.plot(x, l1,'bo',label='Actual Data')
plt.plot(x, l2,c='#EB1344',ls='-',label='GM(1,1)',linewidth=1)
plt.plot(x, l3,c='#333274',ls= '--',label='SSVR',linewidth=1)
plt.plot(x, l4,c='#4AC7A7',ls='-.', label='ANN',linewidth=1)
plt.plot(x, l5,c='#E36414',ls=':', label='GLV',linewidth=1)
plt.plot(x, l6,c='#E52F9E',ls='--', label='FGLV',linewidth=1)
plt.plot(x, l7,c='k',ls='-', label='FDGLV',linewidth=1)
plt.vlines(2019, 0.6, 0.85, colors = "k", linestyles = "-",lw=0.8)

x_major_locator = MultipleLocator(2)
ax= plt.gca()
ax.xaxis.set_major_locator(x_major_locator)


plt.xlabel('Years')
plt.text(2012,0.696,'Data for building the model',fontsize=10,c='red')
plt.text(2020,0.747,'Trend prediction',fontsize=10,c='red')

ax.annotate('', xy=(2018,0.7), xytext=(2019,0.7),
            arrowprops=dict(arrowstyle="->", color="r"))
ax.annotate('', xy=(2020,0.75), xytext=(2019,0.75),
           arrowprops=dict(arrowstyle="->", color="r"))

plt.legend()
leg = plt.legend(loc=4)
leg.get_frame().set_linewidth(0.0)

#plt.show()

結果展示在這裏插入圖片描述
更多詳細信息請參考:https://matplotlib.org/api/pyplot_summary.html
(裏面有更詳細的代碼用法解釋)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章