[英]seaborn.FacetGrid on array of arrays
我在一個函數中生成一個數組數組,傳遞給一個 pandas.DataFrame,我想為每個數組運行多個直方圖來驗證數據。
我的 df 是這樣的,其中列是數組,行是特定索引。 它使用pd.DataFrame(np.array(nodeRemovals).T)
(但我嘗試不使用轉置)。
0 1
0 1257 2112
1 2527 1455
2 298 58
3 1762 155
4 1472 1695
5 1563 1327
6 2018 2589
7 1540 1104
8 1014 1939
9 2662 984
10 2477 364
我想定義一個自定義地圖功能,其中將選擇一列,但基於結構化多圖網格的可用文檔,我無法弄清楚。
現在我正在做,但它沒有像我想要的那樣產生直方圖馬賽克。
g = sns.FacetGrid(nodeDf)
g.map(sns.histplot, kde=True, bins=10, color='blue')
plt.show()
首先,我加載你的數據
import pandas as pd
from io import StringIO
a = """ 0 1
0 1257 2112
1 2527 1455
2 298 58
3 1762 155
4 1472 1695
5 1563 1327
6 2018 2589
7 1540 1104
8 1014 1939
9 2662 984
10 2477 364"""
df_wide= pd.read_fwf(StringIO(a),colspecs=[(4,10),(10,16)])
我稱這種格式為“寬”,因為每個源數組有一列,可能是一個“寬”數據框。 我們現在將其轉換為“長”數據框,所有數據都垂直堆疊。 這是 seaborn 最適合使用的格式。 當然,它可以處理廣泛的數據,但我認為你在長格式中遇到的問題和誤解會更少。 在他們的文檔中查看更多信息https://seaborn.pydata.org/tutorial/data_structure.html#long-form-vs-wide-form-data
df_long = df_wide.melt(var_name = 'array',value_name='removals')
最后,我們使用 seaborn 進行繪圖。 要制作直方圖網格,您可以像以前一樣使用FacetGrid
的路線,但是有一個方便的功能可以做到這一點。 它被稱為displot
import seaborn as sns
import matplotlib.pyplot as plt
sns.displot(data=df_long,x='removals',col='array',color='blue',kde=True,bins=10)
plt.show()
結果是這樣的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.