當在一張圖中包含大量數據和多個曲線時,線條的樣式,顏色等風格化的變量設置就顯得尤爲重要,今天我來總結一下在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)
先講一下在上面這幾行代碼中提到的幾個元素:
-
color (簡寫 ‘ c ‘)
再多條曲線中顏色的選擇很重要,這裏我推薦一個不錯的網站:https://www.schemecolor.com, 裏面提供了大量的顏色和組合可供選擇可以直接複製,節省了很大的時間。 -
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
(裏面有更詳細的代碼用法解釋)