Seaborn FacetGrid col_wrap(宽转长)绘图问题

1 投票
1 回答
3172 浏览
提问于 2025-04-18 04:01

我正在尝试使用Seaborn的FacetGrid和col_wrap来绘制一个宽表格中的每一行。

首先,我把宽格式的数据转换成长格式:
-- 用stack()把宽格式的数据变成一个序列,叫做s
-- 使用get_level_values来获取数据的层级值。
-- 然后把这个序列添加到数据框中。

但是FacetGrid似乎只绘制了第一个图表?

dt1 = pd.DataFrame({'s1':[0,1,2,3,4], 's2':[4,2,3,6,7], 's3':[6,7,3,4,7] })
def fct(data):
    #toy model dataframe
    #dt1.index.names = ['ind']
    dt = data.stack()
    dt.index.names = ['i','s']
    ind = pd.Series( dt.index.get_level_values(0).values )
    sub = pd.Series( dt.index.get_level_values(1).values )
    dtt = pd.DataFrame( ind , columns=['ind'])
    dtt['sub'] = sub
    dtt['ind'] = ind
    dtt['dt'] = dt.values
    #dt.reindex(columns='v')
    print ( 'dt ', dtt.describe)
    g = sns.FacetGrid( dtt, col='sub', col_wrap=1, size=2, ylim=(0, 10) )
    g.map( sns.pointplot, 'ind', 'dt', color=".3", ci=None );

`

在这里输入图片描述

1 个回答

0

我不太确定是什么原因导致这个问题,但你可以试试用 row='sub' 这样做,应该能得到你想要的结果。

顺便说一下,你可以用 factorplot 并设置 kind='point' 来画这个图,这样就不需要直接使用 FacetGrid,可能会更简单一些。

撰写回答