簡體   English   中英

數組數組上的 seaborn.FacetGrid

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM