2016-12-02 6 views
2

Я пытаюсь построить набор данных с помощью stripplot. Вот голова (есть 25 столбцов):Построение широкоформатной матрицы с оттенками в морском полотне

Labels Acidobacteria Actinobacteria Armatimonadetes Bacteroidetes 
0  0    0    495    NaN   27859 
1  1    0   1256    NaN   46582 
2  0    0   1081    NaN   23798 
3  1    0   2523    NaN   35088 
4  0    0   1383    NaN   19338 

У меня есть этот набор данных хранится в панд DataFrame и можно построить его с помощью:

def plot(): 
    ax = sns.stripplot(data = df) 
    ax.set(xlabel='Bacteria',ylabel='Abundance') 
    plt.setp(ax.get_xticklabels(),rotation=45) 
    plt.show() 

Для получения this plot.

Я хотел бы установить оттенки, чтобы отразить столбец 'Labels'. Когда я пытаюсь:

sns.stripplot(x=df.columns.values.tolist(),y=df,data=df,hue='Labels') 

я получаю:

ValueError: cannot copy sequence with size 26 to array axis with dimension 830 

ответ

3

Так что я понял это. Я должен был изменить свои данные, штабелирования и переиндексации:

cols = df.columns.values.tolist()[3:] 
stacked = df[cols].stack().reset_index() 
stacked.rename(columns={'level_0':'index','level_1':'Bacteria',0:'Abundance'},inplace=True) 

который выводит:

  index   Bacteria Abundance 
0   0  Acidobacteria 0.000000 
1   0 Actinobacteria 0.005003 
2   0 Armatimonadetes 0.000000 
3   0  Bacteroidetes 0.281586 

Далее я должен был создать новый столбец, чтобы назначить метки для каждой точки данных:

label_col = np.array([[label for _ in range(len(cols))] for label in df['Labels']]) 
label_col = label_col.flatten() 

stacked['Labels'] = label_col 

Итак:

index   Bacteria Abundance Labels 
0  0 Acidobacteria 0.000000  0 
1  0 Actinobacteria 0.005003  0 
2  0 Armatimonadetes 0.000000  0 
3  0 Bacteroidetes 0.281586  0 
4  0  Chlamydiae 0.000000  0 

А потом сюжет:

def plot(): 
    ax = sns.stripplot(x='Bacteria',y='Abundance',data=stacked,hue='Labels',jitter=True) 
    ax.set(xlabel='Bacteria',ylabel='Abundance') 
    plt.setp(ax.get_xticklabels(),rotation=45) 
    plt.show() 
plot() 

Для получения this graph.

Спасибо за помощь!

+0

Отличный ответ! Но это большая работа, чтобы получить широкоформатную матрицу с цветовой гаммой, смешанной в ... Я хочу, чтобы у Seaborn больше поддерживалась широкоформатная графика. –