1 圖例完善
基礎版:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.linspace(-2*np.pi,2*np.pi,200)
y=np.sin(x)
y1=np.cos(x)
plt.plot(x,y,label=r'$\sin(x)$') # 這裡使用TeX功能實作對數學表達式的支援
plt.plot(x,y1,label=r'$\cos(x)$')
plt.legend(loc='lower left') # 用來添加圖例,并将其放置在左下角
plt.title("正弦函數與餘弦函數的圖像")
進階版
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.arange(0,2.1,0.1)
y=np.power(x,3)
y1=np.power(x,2)
y2=np.power(x,1)
plt.plot(x,y,label=r'$x^3$')
plt.plot(x,y1,label=r'$x^2$')
plt.plot(x,y2,label=r'$x$')
plt.legend(loc='upper left', bbox_to_anchor=(0.05,0.95),ncol=3,title='function',shadow=True,fancybox=True)
plt.title("函數圖像")
plt.show()
代碼詳解:
plt.legend(loc='upper left', bbox_to_anchor=(0.05,0.95),ncol=3,title='function',shadow=True,fancybox=True)
- loc:位置參數
- ncol:書中并未給出解釋,大幅度變動參數似乎對圖像沒有影響,暫不清楚是控制什麼内容的變量
- title:圖例标題
- shadow:是否添加陰影,取值True或False fancybox:控制邊框線是否為圓角
- bbox_to_anchor:框線位置參數,書中解釋:該參數的參數值是個四元元組,且使用Axes坐标系統,第一個參數表示距離畫布左側的x軸長度的倍數的距離,第二個元素代表距離畫布底部的y軸長度的倍數的距離,第三個元素代表x軸長度的倍數的線框長度,第四個元素代表y軸長度的倍數的線框寬度。
會講圖例放在上方左手邊拐角處的距離坐标軸左邊0.1,底部7.6的位置(有些不太懂,希望有大神看到後可以解釋下~)plt.legend(loc='upper left', bbox_to_anchor=(0.05,0.95))
2 标題完善
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.linspace(-2,2,1000)
y=np.exp(x)
plt.plot(x,y,ls='--',lw=2,color='g')
plt.title('left demo',loc='left',fontdict={'size':'xx-large','color':"r",'family':'Times New Roman'})
plt.title('center demo') # 預設黑色字型
plt.title('right demo',loc='right',family='Comic Sans MS',size=20,style='oblique',color='c')
plt.show()
plt.title('right demo',loc='right',family='Comic Sans MS',size=20,style='oblique',color='c')
plt.title('标題内容',loc标題位置,family字型,size字型大小,style字型風格,color字型顔色)
上述對标題格式設定的内容,如family,size,style,color等可以分别作為标題函數title()的關鍵字參數,也可以放在關鍵字fontdict字典中存儲如:
plt.title('left demo',loc='left',
fontdict={'size':'xx-large',
'color':"r",
'family':'Times New Roman'})
3 帶圖例的餅圖
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
elements=['面粉','砂糖','奶油','草莓醬','堅果']
weight=[40,15,20,10,15]
colors=['#1b9e77','#d95f02','#7570b3','#e6ab02']
wedges,texts,autotexts=plt.pie(weight,autopct='%3.1f%%',textprops=dict(color='w'),colors=colors)
plt.legend(wedges,elements,fontsize=12,title='配料表',loc='center left',bbox_to_anchor=(0.91,0,0.3,1))
plt.setp(autotexts,size=15,weight='bold')
plt.setp(texts,size=12)
plt.title('果醬面包配料比例表')
plt.show()
調用圖例函數
plt.legend(wedges,elements)
将餅塊外部的文本标簽放在圖例中,而餅片的數值标簽仍放在餅片内部,函數legend()的參數wedges與elements分别表示餅片執行個體清單和文本标簽清單,而且這兩個參數要一起配合使用才可以将餅片外部的文本标簽放置在圖例内部的任務中。
有關帶圖例的餅圖,楔形圖,目前都不是特别熟悉,後續繼續學習
4 調整刻度機關與刻度标簽
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.linspace(-2*np.pi,2*np.pi,200)
y=np.sin(x)
# 子圖1
plt.subplot(211)
plt.plot(x,y)
# 子圖2
plt.subplot(212)
plt.xlim(-2*np.pi,2*np.pi)
plt.xticks([-2*np.pi,-3*np.pi/2,-1*np.pi,-1*(np.pi)/2,0,(np.pi)/2,np.pi,3*np.pi/2,2*np.pi],
[r'$-2\pi$',r'$-3\pi/2$',r"$-\pi$",r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$',r'$3\pi/2$',r'$2\pi$'])
plt.plot(x,y,ls='--',lw=2,color='g')
plt.show()
這裡普及下plt.xtick()的用法大概類似與覆寫的意思,提示到此,後續自己再寫個教程
5 逆序設定坐标軸刻度标簽
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.linspace(-2,2,1000)
y=np.exp(x)
plt.plot(x,y,ls='--',lw=2,color='g')
plt.xlim(2,-2)
plt.show()
這裡采用了本文2案例中的代碼,多添加了一部分
plt.xlim(2,-2)
将刻度值降序排列的關鍵在于将原本
plt.xlim(xmax,xmin)
換為了
plt.xlim(xmin,xmax)
以上感謝劉大成《python資料可視化之matplotlib實踐》