日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

还在对Matplotlib繁琐的图层设置感到烦恼!?快来看看这个Python绘图工具包吧

發布時間:2024/9/15 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 还在对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?proplot

format()簡化代碼

Proplot 繪制圖表不需要像matplotlib那樣對每一個繪圖屬性進行設置,其提供的format() 函提供一次更改所有設置的格式化方法。我們首先舉個簡單的例子,如下:

  • 使用matplotlib 繪制

import?matplotlib.pyplot?as?plt import?matplotlib.ticker?as?mticker import?matplotlib?as?mpl with?mpl.rc_context(rc={'axes.linewidth':?1,?'axes.color':?'gray'}):fig,?axs?=?plt.subplots(ncols=2,?sharey=True)axs[0].set_ylabel('bar',?color='gray')for?ax?in?axs:ax.set_xlim(0,?100)ax.xaxis.set_major_locator(mticker.MultipleLocator(10))ax.tick_params(width=1,?color='gray',?labelcolor='gray')ax.tick_params(axis='x',?which='minor',?bottom=True)ax.set_xlabel('foo',?color='gray')
  • ProPlot繪制

import?proplot?as?plot fig,?axs?=?plot.subplots(ncols=2) axs.format(linewidth=1,?color='gray') axs.format(xlim=(0,?100),?xticks=10,?xtickminor=True,?xlabel='foo',?ylabel='bar')

從這簡單的例子中就可以看出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 顏色條和圖例

import?proplot?as?plot import?numpy?as?np fig,?axs?=?plot.subplots(nrows=2,?share=0,?axwidth='55mm',?panelpad='1em') axs.format(suptitle='Stacked?colorbars?demo') state?=?np.random.RandomState(51423) N?=?10 #?Repeat?for?both?axes for?j,?ax?in?enumerate(axs):ax.format(xlabel='data',?xlocator=np.linspace(0,?0.8,?5),title=f'Subplot?#{j+1}')for?i,?(x0,?y0,?x1,?y1,?cmap,?scale)?in?enumerate(((0,?0.5,?1,?1,?'grays',?0.5),(0,?0,?0.5,?0.5,?'reds',?1),(0.5,?0,?1,?0.5,?'blues',?2))):if?j?==?1?and?i?==?0:continuedata?=?state.rand(N,?N)?*?scalex,?y?=?np.linspace(x0,?x1,?N?+?1),?np.linspace(y0,?y1,?N?+?1)m?=?ax.pcolormesh(x,?y,?data,?cmap=cmap,levels=np.linspace(0,?scale,?11))ax.colorbar(m,?loc='l',?label=f'dataset?#{i+1}')plt.savefig(r'E:\Data_resourses\DataCharm?公眾號\Python\學術圖表繪制\ProPlot\colorbar_legend_02.png',dpi=900)

效果如下:

  • Figure 顏色條和圖例

import?proplot?as?plot import?numpy?as?np fig,?axs?=?plot.subplots(ncols=3,?nrows=3,?axwidth=1.4) state?=?np.random.RandomState(51423) m?=?axs.pcolormesh(state.rand(20,?20),?cmap='grays',levels=np.linspace(0,?1,?11),?extend='both' )[0] axs.format(suptitle='Figure?colorbars?and?legends?demo',?abc=True,abcloc='l',?abcstyle='(a)',?xlabel='xlabel',?ylabel='ylabel' ) fig.colorbar(m,?label='column?1',?ticks=0.5,?loc='b',?col=1) fig.colorbar(m,?label='columns?2-3',?ticks=0.2,?loc='b',?cols=(2,?3)) fig.colorbar(m,?label='stacked?colorbar',?ticks=0.1,?loc='b',?minorticks=0.05) fig.colorbar(m,?label='colorbar?with?length?<1',?ticks=0.1,?loc='r',?length=0.7)

效果如下:

時間刻度(Datetime ticks)

  • Datetime ticks

import?proplot?as?plot import?numpy?as?np plot.rc.update(linewidth=1.2,?fontsize=10,?ticklenratio=0.7,figurefacecolor='w',?facecolor='pastel?blue',titleloc='upper?center',?titleborder=False, ) fig,?axs?=?plot.subplots(nrows=5,?axwidth=6,?aspect=(8,?1),?share=0) axs[:4].format(xrotation=0)??#?no?rotation?for?these?examples#?Default?date?locator #?This?is?enabled?if?you?plot?datetime?data?or?set?datetime?limits axs[0].format(xlim=(np.datetime64('2000-01-01'),?np.datetime64('2001-01-02')),title='Auto?date?locator?and?formatter' )#?Concise?date?formatter?introduced?in?matplotlib?3.1 axs[1].format(xlim=(np.datetime64('2000-01-01'),?np.datetime64('2001-01-01')),xformatter='concise',?title='Concise?date?formatter', )#?Minor?ticks?every?year,?major?every?10?years axs[2].format(xlim=(np.datetime64('2000-01-01'),?np.datetime64('2050-01-01')),xlocator=('year',?10),?xformatter='\'%y',?title='Ticks?every?N?units', )#?Minor?ticks?every?10?minutes,?major?every?2?minutes axs[3].format(xlim=(np.datetime64('2000-01-01T00:00:00'),?np.datetime64('2000-01-01T12:00:00')),xlocator=('hour',?range(0,?24,?2)),?xminorlocator=('minute',?range(0,?60,?10)),xformatter='T%H:%M:%S',?title='Ticks?at?specific?intervals', )#?Month?and?year?labels,?with?default?tick?label?rotation axs[4].format(xlim=(np.datetime64('2000-01-01'),?np.datetime64('2008-01-01')),xlocator='year',?xminorlocator='month',??#?minor?ticks?every?monthxformatter='%b?%Y',?title='Ticks?with?default?rotation', ) axs.format(ylocator='null',?suptitle='Datetime?locators?and?formatters?demo' ) plot.rc.reset() plt.savefig(r'E:\Data_resourses\DataCharm?公眾號\Python\學術圖表繪制\ProPlot\datetick.png',dpi=900)

效果如下:

以上是我認為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绘图工具包吧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。