Matplotlib優(yōu)雅作圖筆記
加入極市專業(yè)CV交流群,與?10000+來(lái)自港科大、北大、清華、中科院、CMU、騰訊、百度?等名校名企視覺開發(fā)者互動(dòng)交流!
同時(shí)提供每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、干貨資訊匯總,行業(yè)技術(shù)交流。關(guān)注?極市平臺(tái)?公眾號(hào)?,回復(fù)?加群,立刻申請(qǐng)入群~
高效性:永遠(yuǎn)永遠(yuǎn)面向?qū)ο?/strong>

創(chuàng)建figure實(shí)例; 在figure上創(chuàng)建axes; 在axes上添加基礎(chǔ)類對(duì)象。
創(chuàng)建figure對(duì)象和axes對(duì)象; 為每個(gè)容器類元素添加基礎(chǔ)類元素。
先找對(duì)象; 再解決問(wèn)題。
二、高效作圖第一步:創(chuàng)建容器類對(duì)象
# 優(yōu)雅地創(chuàng)建圖和坐標(biāo)系layout = (3, 2) # 坐標(biāo)系的布局fig, axes = plt.subplots(*layout) # 添加圖和坐標(biāo)系# 坐標(biāo)系索引的兩種方式# 1. 矩陣索引ax1 = axes[0][0] #第一個(gè)坐標(biāo)系ax2 = axes[0][1] #第二個(gè)坐標(biāo)系# 2. 遍歷for ax in axes.flat:pass
三、高效作圖第二步:添加基礎(chǔ)類對(duì)象
# 圖fig.legend() # 圖-圖例# 坐標(biāo)系ax.plot() # 坐標(biāo)系-線ax.scatter() # 坐標(biāo)系-點(diǎn)ax.grid() #坐標(biāo)系-網(wǎng)格ax.legend() # 坐標(biāo)系-圖例ax.text() # 坐標(biāo)系-文字ax.set_title('Title') # 坐標(biāo)系-標(biāo)題# 坐標(biāo)軸ax.set_xlabel('xlabel') # 坐標(biāo)系-坐標(biāo)軸-標(biāo)簽# 刻度ax.set_xticklabels(['one', 'two', 'three', 'four', 'five']) # 坐標(biāo)系-坐標(biāo)軸-刻度-標(biāo)簽
ax.就太不優(yōu)雅了,這時(shí)候可以使用ax.set()來(lái)統(tǒng)一設(shè)置,簡(jiǎn)化代碼:# 優(yōu)雅地添加基礎(chǔ)類對(duì)象props = {'title': 'Title', # 坐標(biāo)系-標(biāo)題'xlabel': 'xlabel', # 坐標(biāo)系-坐標(biāo)軸-標(biāo)簽'xticklabels':xticklabels_list} # 坐標(biāo)系-坐標(biāo)軸-刻度-標(biāo)簽ax.set(**props)
四、我是例子
# 高效作圖第一步:創(chuàng)建figure和axesfig, ax = plt.subplots() # 添加圖和坐標(biāo)系# 高效作圖第二步:添加基礎(chǔ)類對(duì)象ax.plot(df.index, df['MC_Price']) # 坐標(biāo)系-線ax.plot(df.index, df['DT_Price']) # 坐標(biāo)系-線ax.plot(df.index, df['TT_Price']) # 坐標(biāo)系-線ax.plot(df.index, df['WT_Price']) # 坐標(biāo)系-線props = {'title': 'Title', #坐標(biāo)系-標(biāo)題'xlabel': 'xlabel', # 坐標(biāo)系-坐標(biāo)軸-標(biāo)簽'ylabel':'ylabel'} # 坐標(biāo)系-坐標(biāo)軸-標(biāo)簽ax.set(**props)

美觀性:先全局,后局部
一、美觀作圖第一步:全局美化格式
plt.style.use()使用官方預(yù)定義的樣式,二是通過(guò)mpl.rcParams自定義樣式。plt.style.available可以查看所有可用樣式,時(shí)間緊迫時(shí)可以用這種方法。mpl.rcParams.keys()可以查看所有可以全局定義的屬性,用mpl.rcParams.update()可以實(shí)現(xiàn)一行代碼更新參數(shù)。params = {"font.size": 12, # 全局字號(hào)'font.family':'STIXGeneral', # 全局字體"figure.subplot.wspace":0.2, # 圖-子圖-寬度百分比"figure.subplot.hspace":0.4, # 圖-子圖-高度百分比"axes.spines.right":False, # 坐標(biāo)系-右側(cè)線"axes.spines.top":False, # 坐標(biāo)系-上側(cè)線"axes.titlesize":12, # 坐標(biāo)系-標(biāo)題-字號(hào)"axes.labelsize": 12, # 坐標(biāo)系-標(biāo)簽-字號(hào)"legend.fontsize": 12, # 圖例-字號(hào)"xtick.labelsize": 10, # 刻度-標(biāo)簽-字號(hào)"ytick.labelsize": 10, # 刻度-標(biāo)簽-字號(hào)"xtick.direction":'in', # 刻度-方向"ytick.direction":'in' # 刻度-方向}
style_dict = {'MC_Price':dict(linestyle=':', marker='o',markersize=6,color='#fdae61'),'WT_Price':dict(linestyle='-',marker='*',markersize=6,color='#d7191c'),'DT_Price':dict(linestyle='--',marker='s',markersize=6,color='#abdda4'),'TT_Price':dict(linestyle='-.',marker='v',markersize=6,color='#2b83ba')}
ax.plot(x,y,**style_dict[key])
matplotlibrc文件,我就不再展開了,因?yàn)槲乙膊粫?huì)。二、美觀作圖第二步:局部美化格式
fig.subplots_adjust(left=0.09, bottom=0.1, right=0.99, top=0.99, wspace=0.1) # 調(diào)整子圖的位置和間距ax.set_xlim(min_value, max_value) # 調(diào)整坐標(biāo)軸范圍ax.legend(loc='upper right') #調(diào)整圖例位置ax.grid(linestyle="--", alpha=0.2) # 調(diào)整網(wǎng)格的線型和透明度
三、我也是例子
# 優(yōu)雅地創(chuàng)建Figure和Axesfig, ax = plt.subplots()# 優(yōu)雅地添加基礎(chǔ)類對(duì)象ax.plot(df.index, df['MC_Price'], **style_dict['MC_Price'])ax.plot(df.index, df['DT_Price'], **style_dict['DT_Price'])ax.plot(df.index, df['TT_Price'], **style_dict['TT_Price'])ax.plot(df.index, df['WT_Price'], **style_dict['WT_Price'])props = {'xlabel': 'xlabel', # 坐標(biāo)軸-標(biāo)簽'ylabel':'ylabel'} # 坐標(biāo)軸-標(biāo)簽ax.set(**props)# 優(yōu)雅地局部美化格式fig.legend(('MC','DT','TT','WT'),frameon=False, loc='upper center',ncol=4,handlelength=4) # 圖例ax.fill_between(df.index, df['MC_up'], df['MC_down'], alpha=0.15, linewidth=0, color='#fdae61') # 陰影ax.grid(linestyle="--", alpha=0.2) # 網(wǎng)格線

交互性:無(wú)縫融合LaTex
\showthe\textwidth命令來(lái)獲得最終需要的圖片的寬度:\documentclass{article}\begin{document}\showthe\textwidth\end{document}
.log文件中就可以找到這樣的字眼:> 443.86319pt.l.204 \showthe\textwidth
atplotlib-Latex這篇文章給出的解決方案:先進(jìn)行單位換算,再用黃金比例0.618來(lái)確定圖片的高度。fig_width_pt = 443.86319ptinches_per_pt = 1 / 72.27golden_ratio = (5**.5 - 1) / 2fig_width_in = fig_width_pt * inches_per_ptfig_height_in = fig_width_in * golden_ratio
交互作圖第二步:按格式導(dǎo)出圖片
.svg或者.pdf為后綴的,這類圖片放大時(shí)不會(huì)失真。一般而言,SVG格式用于Word,PDF格式用于LaTeX。bbox_inches='tight'參數(shù)。導(dǎo)出圖片的代碼如下:fig.savefig('example.pdf', format='pdf', bbox_inches='tight')
\begin{figure}\centering\includegraphics{example.pdf}\end{figure}
總結(jié)
5、https://mp.weixin.qq.com/s/QXRXlejzKWox_rvLa66joA

評(píng)論
圖片
表情
