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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matplotlib 可视化之多图层叠加

發布時間:2024/9/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matplotlib 可视化之多图层叠加 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們一起來看看精彩的可視化圖表是如何繪制出來的。

定義曲線函數

首先定義出圖中隨機曲線的繪圖函數。

#?Some?nice?but?random?curves def?curve():n?=?np.random.randint(1,?5)centers?=?np.random.normal(0.0,?1.0,?n)widths?=?np.random.uniform(5.0,?50.0,?n)widths?=?10?*?widths?/?widths.sum()scales?=?np.random.uniform(0.1,?1.0,?n)scales?/=?scales.sum()X?=?np.zeros(500)x?=?np.linspace(-3,?3,?len(X))for?center,?width,?scale?in?zip(centers,?widths,?scales):X?=?X?+?scale?*?np.exp(-(x?-?center)?*?(x?-?center)?*?width)return?X

繪圖

將比較抽象的曲線函數可視化,更加直觀。

np.random.seed(123) #?獲取曲線數據 Y?=?curve() X?=?np.linspace(-3,?3,?len(Y)) #?畫布準備 fig?=?plt.figure(figsize=(10,?6),dpi=600) #?設置畫布 ax?=?plt.subplot(1,?1,?1,?frameon=False,?sharex=ax) #?繪制曲線 ax.plot(X,?3?*?Y,?color="k",?linewidth=0.75,?zorder=100) plt.show()

由于該函數的隨機性,每次運行都會給出不同的結果:

配置樣式

填充顏色、設置坐標軸及坐標軸標簽。這里重點是顏色填充函數:Axes.fill_between()

Axes.fill_between(self,?x,?y1,?y2=0,?where=None,?interpolate=False,?step=None,?*,?data=None,?**kwargs)

參數:

  • x: 該參數包含用于定義曲線的數據點的水平坐標。

  • y1: 此參數包含用于定義第一條曲線的數據點的y坐標

  • y2: 該參數包含用于定義第二條曲線的數據點的y坐標。它是可選的,默認值為0。

  • where: 此參數是可選參數。它用于排除某些水平區域的填充。

  • interpolate: 此參數也是可選參數。它是錯誤欄行的線寬,默認值為NONE。

  • step: 此參數也是可選參數。它用于定義填充是否應為階躍函數。

顏色填充有四種用法

① 基本用法

參數 y1 和 y2 可以是標量,表示給定y值處的水平邊界。只要 y1 給出, y2 ?默認為0。

ax1.fill_between(X,?Y,?color=color[0]) ax2.fill_between(X,?Y,?1,?color=color[1]) ax3.fill_between(X,?Y,?Y2,?color=color[2])

② 置信區間

一個常見的應用 fill_between 是置信帶的指示。

當 fill_between 使用填充顏色填充某個區域時,這些顏色可能有點強,以至于宣兵奪主。我們希望淡化填充區域而突出主體。因此設置參數alpha的值,以達到減淡顏色,使該區域半透明的目的。

y_err?=?X.std()?*?np.sqrt(1/len(X)?+??(X?-?X.mean())**2?/?np.sum((X?-?X.mean())**2)) ax.fill_between(X,?3*Y?-?y_err,?3*Y?+?y_err,alpha=0.2,?color=cmap(0.3))

③ 選擇性填充水平區域

參數where允許指定要填充的 x 范圍。它是一個與x大小相同的布爾數組。

僅填充連續 True 序列的x范圍。因此,相鄰的 TrueFalse 值之間的范圍永遠不會被填滿。當數據點應該表示一個連續的量時,通常不希望出現這種情況。因此,建議設置 interpolate=True,除非數據點的x距離足夠細,使上述效果不明顯。插值近似于實際的x位置,在那里 where 條件將改變,并擴展填充到那里。

ax1.fill_between(x01,?y01,?y02,?where=(y01?>?y02),?color='C0',?alpha=0.3) ax1.fill_between(x01,?y01,?y02,where=(y01?<?y02),?color='C1',?alpha=0.3)ax2.fill_between(x01,?y01,?y02,?where=(y01?>?y02),?color='C0',?alpha=0.3,interpolate=True) ax2.fill_between(x01,?y01,?y02,?where=(y01?<=?y02),?color='C1',?alpha=0.3,interpolate=True)

④ 在整個軸上有選擇地標記水平區域

同樣的選擇機制可以應用于填滿坐標軸的全部垂直高度。為了不受y極限的影響,我們添加了一個轉換來解釋數據坐標中的x值和坐標軸坐標中的y值。

下面的示例標記y數據高于給定閾值的區域。

threshold?=?0.4 ax.axhline(threshold,?color=cmap(0.2),?lw=2,?alpha=0.7,linestyle='-.') ax.fill_between(X,?0,?1,?where=?3*Y?>?threshold,?color=cmap(0.5),?alpha=0.5,?transform=ax.get_xaxis_transform())

本案例中,選擇第一種常規填充。

#?畫布準備 cmap?=?mpl.cm.get_cmap("Spectral") color?=?cmap(0) ax.fill_between(X,?3?*?Y,?0,?color=color,?zorder=100) ax.yaxis.set_tick_params(tick1On=False) ax.set_xlim(-3,?3) ax.set_ylim(-1,?4) ax.axvline(0.0,?ls="--",?lw=0.75,?color="black",?zorder=250) ax.text(0.0,?1.0,"Value?%d"?%?1,ha="left",?va="top",weight="bold",?size=15,transform=ax.transAxes,) ax.yaxis.set_tick_params(labelleft=True) ax.set_yticks(np.arange(1)) ax.set_yticklabels(["Serie?%d"?%?i?for?i?in?range(1,?2)]) for?tick?in?ax.yaxis.get_major_ticks():tick.label.set_fontsize(15)tick.label.set_verticalalignment("bottom")?#?垂直對齊 plt.show()

多圖層疊加

zorder 用來控制繪圖順序,其值越大,畫上去越晚,線條的疊加就是在上面的。對 plotting 方法的任何調用都可以顯式地為該特定項的 zorder 設置值。許多創建可見對象的函數都接受 zorder 參數。或者可以在繪圖后調用 set_order() 函數作用在創建的對象上。

接下來開始繪制開篇的這個圖,我們發現每條曲線都部分地覆蓋了其他曲線,因此為每條曲線設置適當的zorder是很重要的,這樣渲染將獨立于繪制順序。

通過橫向及縱向循環繪制多個圖形,這里注意設置疊放次序參數zorder,最下面的在最上面,然后依次疊放。

rows,?cols?=?3,?4 ax?=?None for?n?in?range(rows):#?設置多子圖ax?=?plt.subplot(1,?rows,?n?+?1,?frameon=False,?sharex=ax)for?i?in?range(cols):Y?=?curve()X?=?np.linspace(-3,?3,?len(Y))ax.plot(X,?3?*?Y?+?i,?color="k",?linewidth=0.75,?zorder=100?-?i)color?=?cmap(i?/?cols)ax.fill_between(X,?3?*?Y?+?i,?i,?color=color,?zorder=100?-?i)

最后多次循環,可以得到下圖。

參考資料

Scientific Visualisation-Python & Matplotlib
Python數據科學手冊

END

各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)

推薦閱讀

牛逼!Python常用數據類型的基本操作(長文系列第①篇)

牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)

牛逼!Python函數和文件操作(長文系列第③篇)

牛逼!Python錯誤、異常和模塊(長文系列第④篇)

總結

以上是生活随笔為你收集整理的Matplotlib 可视化之多图层叠加的全部內容,希望文章能夠幫你解決所遇到的問題。

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