还在对Matplotlib繁琐的图层设置感到烦恼!?快来看看这个Python绘图工具包吧
是不是被matplotlib繁瑣繪圖屬性設置搞得一臉懵?是不是因常常記不住某一個圖層設置函數而被迫看又長又枯燥的API文檔?又或者是不是在面對多個matplotlib子圖時寫了大量的循環代碼來設置屬性?最后還是不是希望只精通一個Python繪圖包就可以把二維、空間等類型圖表繪制方法都掌握??此外,還有好多無奈和吐槽,我不知道你們是不是這樣?反正以上列出的幾點就是我在使用matplotlib自定義繪制圖表時最大的感觸了,當然,本期推文不是來吐槽的,是來為大家提供好的解決方法的。
下面就介紹下今天的主角-- ProPlot。說真的!當我剛開始發現這個包時:“嗯?不錯,logo和matplotlib很像”,可是,當我在熟悉大多數和經常使用matplotlib繪圖時,回來再看這個工具包時:“我*,真香!!我之前干了啥?趕快用起來!”。
本期推文將告訴你如何使用更少的代碼實現繁瑣的自定義繪圖需求,當然,也是符合出版需求的配圖,主要內容如下:
ProPlot 庫介紹
ProPlot 實例演示
ProPlot 庫介紹
使用Python-matplotlib繪制圖表時,默認的顏色以及格式主題只能幫助我們熟悉繪圖函數,而想要設計出優秀的可視化作品(無論是出版級別還是略帶藝術氣息) 都需要熟悉大量的繪圖函數,如顏色、刻度、軸脊、字體等,當涉及繪制多子圖時,這些操作都會耗費我們大量的精力,不僅導致編寫代碼冗長,而且還易出錯,具體可以查看下我之前的文章Python-matplotlib 學術散點圖 EE 統計及繪制 和 Python-matplotlib 橫向堆積柱狀圖繪制。除此之外,如果你每天都需要使用matplotlib繪圖且經常需要對圖表進行美化,那Proplot 繪圖包就太適合你了,也不要擔心會不適應,人家可是對matplotlib進行高度封裝,極大簡化繪圖函數而已。下面我們就其安裝和主要使用方法進行簡單介紹,如果大家想要詳細了解,可以去官網哦。
安裝
我們直接可是使用pip或者conda直接進行安裝即可,
#for?pip pip?install?proplot #for?conda conda?install?-c?conda-forge?proplot當然,由于版本的不斷更新,你還可以使用如下代碼進行更新處理:
#for?pip pip?install?--upgrade?proplot #for?conda conda?upgrade?proplotformat()簡化代碼
Proplot 繪制圖表不需要像matplotlib那樣對每一個繪圖屬性進行設置,其提供的format() 函提供一次更改所有設置的格式化方法。我們首先舉個簡單的例子,如下:
使用matplotlib 繪制
ProPlot繪制
從這簡單的例子中就可以看出Proplot的簡便性了。
A-b-c 多子圖序號添加
除了上面 format() 大大縮減代碼量,我們在介紹了我認為比較方便的繪圖方法-多子圖序號自動添加。具體的例子如下:
#?樣本數據 import?numpy?as?np state?=?np.random.RandomState(51423) data?=?2?*?(state.rand(100,?5)?-?0.5).cumsum(axis=0)import?proplot?as?plot fig,?axs?=?plot.subplots(ncols=2) axs[0].plot(data,?lw=2) axs[0].format(xticks=20,?xtickminor=False) axs.format(abc=True,abcstyle='(A)',abcsize=12,abcloc='ul',suptitle='Abc?label?test',?title='Title',xlabel='x?axis',?ylabel='y?axis' ) plt.savefig(r'E:\Data_resourses\DataCharm?公眾號\Python\學術圖表繪制\ProPlot\abc_01.png',dpi=900)效果如下:
還可以對序號進行樣式(abcstyle)、位置(abcloc)、大小(abcsize) 等的設置。其他詳細設置可以參考官網。
顏色條(Colorbars)和圖例(legends)
axis 顏色條和圖例
效果如下:
Figure 顏色條和圖例
效果如下:
時間刻度(Datetime ticks)
Datetime ticks
效果如下:
以上是我認為ProPlot 比較優秀的幾點,當然,大家也可以自行探索,發現自己喜歡的技巧。
ProPlot 實例演示
我們使用之前的推文數據進行實例操作,詳細代碼如下:
#開始繪圖 labels?=?['L1',?'L2',?'L3',?'L4',?'L5'] data_a?=?[20,?34,?30,?35,?27] data_b?=?[25,?32,?34,?20,?25] data_c?=?[12,?20,?24,?17,?16]x?=?np.arange(len(labels)) width?=?.25 fig,?axs?=?plot.subplots(ncols=2,?nrows=1,?sharey=1,?width=10,height=4) #for?mark,?data?in?zip() axs[0].plot(x,y1,?marker='s',c='k',lw=.5,label='D1',markersize=8) axs[0].plot(x,y2,?marker='s',c='k',ls='--',lw=.5,markersize=8,markerfacecolor='white',markeredgewidth=.4,label='D2') axs[0].plot(x,y3,marker='^',c='k',lw=.5,markersize=8,markerfacecolor='dimgray',markeredgecolor='dimgray',label='D3') axs[0].plot(x,y4,marker='^',c='k',lw=.5,markersize=8,label='D4')axs[1].bar(x-width/2,?data_a,width,label='category_A',color='#130074',ec='black',lw=.5) axs[1].bar(x+width/2,?data_b,?width,label='category_B',color='#CB181B',ec='black',lw=.5) axs[1].bar(x+width*3/2,?data_c,width,label='category_C',color='#008B45',ec='black',lw=.5)#先對整體進行設置 axs.format(ylim=(0,40),xlabel='',?ylabel='Values',abc=True,?abcloc='ur',?abcstyle='(A)',abcsize=13,suptitle='ProPlot?Exercise' ) #再對每個子圖進行設置 axs[0].format(ylim=(10,40),title='Multi-category?scatter?plot') axs[1].format(title='Multi-category?bar?plot',xticklabels=['L1',?'L2',?'L3',?'L4',?'L5'])plt.savefig(r'E:\Data_resourses\DataCharm?公眾號\Python\學術圖表繪制\ProPlot\test_01.png',dpi=900) plt.show()效果如下:
只是簡單的繪制,其他的設置也需要熟悉繪圖函數,這里就給大家做個簡單的演示。
總結
本期推文我們介紹了matplotlib非常優秀的科學圖表繪圖庫PrpPlot, 在一定程度上極大了縮減了定制化繪制時間,感興趣的同學可以持續關注這個庫,當然,還是最好在熟悉matplotlib基本繪圖函數及圖層屬性設置函數的基礎上啊。
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)
推薦閱讀
牛逼!Python常用數據類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)
牛逼!Python函數和文件操作(長文系列第③篇)
牛逼!Python錯誤、異常和模塊(長文系列第④篇)
總結
以上是生活随笔為你收集整理的还在对Matplotlib繁琐的图层设置感到烦恼!?快来看看这个Python绘图工具包吧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大厂疯传!Python+商业数据分析+数
- 下一篇: 简单实用,Python代码调试利器