1.小提琴圖和箱線圖
#同時繪製箱線圖和小提琴圖,箱線圖清楚地展示了所繪製的數據集中的四分位數和離群點#小提琴圖則清晰展示了數據集中的分布情況import matplotlib.pyplot as pltimport numpy as np#生成圖紙,繪製一行兩列兩個子圖,圖紙的尺寸設置fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(8,4))#生成導入數據,符合正態分布,(均值,標準差,生成數據的個數),標準差遍歷6,7,8,9(range(6,10))some_data=[np.random.normal(0,std,100) for std in range(6,10)]#繪製第一幅子圖:小提琴圖。要繪製的數據集就是some_data#showmeans:是否顯示均值,showextrema:是否顯示極值,showmedians:是否顯示中位數axes[0].violinplot(some_data,showmeans=True,showmedians=True)axes[0].set_title('xiaotiqin plot')#箱線圖axes[1].boxplot(some_data)axes[1].set_title('xiangxian plot')#對兩幅圖的坐標軸細節進行設置for ax in axes:#顯示橫向網格線 ax.yaxis.grid(True) ax.set_xticks([y+1 for y in range(len(some_data))]) ax.set_xlabel('xlabel') ax.set_ylabel('ylabel')#用setp()命令來進行設置,該命令可以對一個列表或者單個對象進行設置#對坐標軸上的刻度和刻度標籤進行設置plt.setp(axes,xticks=[y+1 for y in range(len(some_data))], xticklabels=['x1','x2','x3','x4'])plt.show()
2.簡單誤差圖
import numpy as npimport matplotlib.pyplot as plt#x:起始點,終止點,步長;設置y公式,使x,y關聯起來x=np.arange(0.0,5,0.5)y=np.exp(-x**0.5)#生成圖紙fig,ax=plt.subplots()#繪製誤差圖,xerr表示橫向的左右偏差,yerr表示縱向的上下偏差#沒有進行具體設定的情況下,左右偏差一致;上下誤差一致ax.errorbar(x,y,xerr=0.4,yerr=0.6)plt.show()
3.複雜一些的誤差圖
import numpy as npimport matplotlib.pyplot as plt#生成x數據集,y公式,橫向誤差和縱向誤差x=np.array([0.4,0.9,1.4,1.9,2.4,2.9,3.4,3.9,4.4,4.9])y=np.exp(-x**2)xerr=0.2yerr=0.3#設置誤差的上下限以及需要繪製的曲線的類型lolims=np.array([0,1,0,1,1,0,1,0,1,1],dtype=bool)uplims=np.array([1,0,1,0,1,0,0,1,0,1],dtype=bool)linestyle='dotted'#生成圖紙,繪製子圖,設置圖紙大小fig,ax=plt.subplots(figsize=(6,5))#繪製一幅標準的誤差圖,位於整個圖片的最下方ax.errorbar(x,y,xerr,yerr,linestyle=linestyle)#繪製一幅比上一幅圖y軸方向高一個單位(y+1)的誤差圖(x軸坐標相同)#以下繪圖依次類推,這幅圖包含了誤差上限ax.errorbar(x,y+1,xerr,yerr,uplims=uplims,linestyle=linestyle)#第三幅包含了誤差下限ax.errorbar(x,y+2,xerr,yerr,lolims=lolims,linestyle=linestyle)#第四幅圖包含了誤差的上下限,並設置了標記ax.errorbar(x,y+3,xerr,yerr,lolims=lolims,uplims=uplims,linestyle=linestyle,marker='o',markersize=6)#shape函數是numpy.core.fromnumeric中的函數,它的功能是讀取矩陣的長度xerr=0.3yerr=np.zeros(x.shape)+0.3yerr[[3,6]]=0.4#通過修改以前的數據來模擬一些限制xlowerlims=lolimsxupperlims=uplimslolims=np.zeros(x.shape)uplims=np.zeros(x.shape)lolims[[6]]=Trueuplims[[6]]=True#正常顯示中文,針對標題plt.rcParams['font.sans-serif'] = ['SimHei']ax.errorbar(x,y+4,xerr,yerr,lolims=lolims,uplims=uplims, xlolims=lolims,xuplims=uplims,linestyle='none', marker='o',markersize=6)ax.set_xlim((0,6))ax.set_title('誤差條形圖的上下限')plt.show()
4.帶有趨勢線的直方圖
import numpy as npimport matplotlib.mlab as mlabimport matplotlib.pyplot as plt#作用:使得隨機數據可預測。設置相同的seed,每次生成的隨機數相同。# 如果不設置seed,則每次會生成不同的隨機數np.random.seed(0)#設置正態分布的均值和標準差,mu = 200sigma = 25#在均值周圍產生符合正態分布的x值x = mu + sigma * np.random.randn(437)num_bins = 50#生成圖紙fig, ax = plt.subplots()#輸入直方圖的繪圖數據:#直方圖函數,x為x軸的值,normed=1表示為概率密度,即和為一# 深藍色方塊,透明度參數0.8.返回n個概率,直方塊左邊線的x值,及各個方塊對象n, bins, patches = ax.hist(x, num_bins, normed=1,facecolor='darkblue', alpha=0.8)#增加一條最佳的趨勢線y = mlab.normpdf(bins, mu, sigma)ax.plot(bins, y, '--')ax.set_xlabel('Smarts')ax.set_ylabel('Probability density')ax.set_title(r'Histogram of IQ: $\mu=200$, $\sigma=25$')#自動調整子圖參數,使之填充整個圖像區域fig.tight_layout()plt.show()