2017-01-03 12 views
3

Я хочу построить 3 горизонтальных графика, с метками в качестве оси y данные как ось x, и я хочу, чтобы каждый график был другим цвет и иметь некоторый тип аннотации, такие как звездочка, которая зависит от signficiance обозначенного столбца в данных, например:Как добавить цвет и звездочку для каждого участка с использованием морского парящего и морского шлюза

dat = pd.DataFrame({ 
    'Labels':['v1','v2','c1','c2'], 
    'Ave': [.2, .3, .5, .9], 
    'SD': [0.02, 0.1, 0.04, 0.06], 
    'Tot': [3, 4, 6, 8], 
    'Sig': [0.05, 0.001, 0.0001, 0.05] 
}) 

sns.set_style('white') 

g = sns.PairGrid(dat, x_vars=['Ave', 'SD', 'Tot'], y_vars=['Labels']) 
g.map(sns.barplot) 

получит мне что-то вроде этого:

enter image description here

Как получить каждый сюжет, «Ave» «SD» и «ToT «быть их собственным цветом? и как я могу добавить аннотации для обозначения значимости, заданной столбцом «Sig»?

ответ

0

не выяснили, как получить это сделано с Сиборн, но с Matplotlib это будет работать

import pandas as pd 

dat = pd.DataFrame({ 
    'Labels':['v1','v2','c1','c2'], 
    'Ave': [.2, .3, .5, .9], 
    'SD': [0.02, 0.1, 0.04, 0.06], 
    'Tot': [3, 4, 6, 8], 
    'Sig':[0.05, 0.005, 0.0001, 0.05], 
    'Sig_mask': [1,2,3,1], 
}) 

import matplotlib.pyplot as plt 
fig = plt.figure() 

# multiple plots 
ax1 = fig.add_subplot(131) 

# horizontal bar plot and set color 
ax1.barh(dat.index.values, dat['SD'], color='r', align='center') 

# SET SPINES VISIBLE 
ax1.spines['right'].set_visible(False) 
ax1.spines['top'].set_visible(False) 

# SET X, Y LABELS 
ax1.set(yticks=dat.index.values, yticklabels=dat.Labels.values) 
ax1.set(xlabel='SD') 

# ADD SIG NOTATION 
for idx, val in enumerate(dat.SD.values): 
    ax1.text(x=val+.003, y=idx, s='*'*dat.Sig_mask[idx], va='center') 

# ADD SECOND PLOT 
ax2 = fig.add_subplot(132) 
# everything else much in the same manner, change color and data column 


# ADD THIRD PLOT 
ax3 = fig.add_subplot(133) 
# same as above 
1

Вы можете получить рядом изменения формы данных в течение длительного (аккуратный) формат и использовать factorplot.

Перепрофилирование:

dat = (
    pandas.DataFrame({ 
     'Labels':['v1','v2','c1','c2'], 
     'Ave': [.2, .3, .5, .9], 
     'SD': [0.02, 0.1, 0.04, 0.06], 
     'Tot': [3, 4, 6, 8], 
     'Sig': [0.05, 0.001, 0.0001, 0.05] 
    }).set_index('Labels') 
    .unstack() 
    .reset_index() 
    .rename(columns={ 
     'level_0': 'stat', 
     0: 'result' 
    }) 
) 

print(dat.head(8)) 

    stat Labels result 
0 Ave  v1 0.20 
1 Ave  v2 0.30 
2 Ave  c1 0.50 
3 Ave  c2 0.90 
4 SD  v1 0.02 
5 SD  v2 0.10 
6 SD  c1 0.04 
7 SD  c2 0.06 

И factorplot:

seaborn.factorplot('result', 'Labels', data=dat, 
        kind='bar', sharex=False, 
        hue='stat', hue_order=stats, 
        col='stat', col_order=stats) 

enter image description here

Проблема заключается в том, что стержни смещены, так как с помощью hue говорит Сиборн, чтобы освободить место для различных категорий в каждом у -должность.

В следующем выпуске вы сможете сказать dodge=False, чтобы избежать этого смещения.