Seaborn FacetGrid col_wrap(从长到长)绘图问题

时间:2014-04-24 01:48:17

标签: python pandas seaborn

我正在尝试使用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 );

`

enter image description here

2 个答案:

答案 0 :(得分:0)

我不确定是什么导致了这种情况,但您应该能够row='sub'并获得您想要的结果。

顺便说一句,您可以factorplotkind='point'一起使用直接绘制此图而不使用FacetGrid,这可能更容易。

答案 1 :(得分:0)

我猜测col_wrap=1不起作用,因为它与你想要按行而不是列来划分网格是一样的。为此,您需要使用row参数。

您还可以查看相关的Github issue here或查看documentation here,了解有关factorplot的更多信息。

像@mwaskom所说,为了获得理想的效果,你应该使用row='sub'

编辑:Fixed here