2015-03-11 1 views
2

J'ai quelques trames de données montrant des objets avec des variables similaires (c'est-à-dire des noms de colonnes) qui varient dans le temps, et je les trace dans des sous-trames.pandas, matplotlib: un moyen d'assigner les mêmes couleurs, des styles de trait pour les mêmes étiquettes de colonnes à travers des sous-placettes?

>>df1.head() 


     FR stim_current self_excitation FF_inh SFA 
1 0.000000   0.0   0.000000 -0.075483 -0 
2 0.000000   0.0   0.000000 -0.000000 -0 
3 -0.000012   0.0   0.000000 -0.001761 -0 
4 -0.000033   0.0  -0.000009 -0.003487 0 
5 -0.000064   0.0  -0.000027 -0.005178 0 

>>df2.head() 

     FR FB_inh stim_current self_excitation 
1 0.000000 -0.001569    1   0.000000 
2 0.017609 -0.000000    1   0.000000 
3 0.034867 -0.000200    1   0.010037 
4 0.051780 -0.000577    1   0.019874 
5 0.068355 -0.001109    1   0.029515 

est-il un moyen d'attribuer un style de ligne par nom de la colonne, de sorte que, par exemple, FR, stim_current et self_excitation aurait les mêmes couleurs dans chaque intrigue secondaire? Dites que je veux que FR soit bleu et gras, que le courant stim soit noir et que self_excitation soit vert. J'aimerais aussi que tout ce qui est différent entre les trames de données apparaisse dans une couleur différente sur chaque sous-placette. Idéalement, je pourrais aussi réordonner les colonnes de la trame de données de sorte que les éléments qui apparaissent dans chaque trame de données soient tous dans la légende en haut et les éléments variés entreraient en bas de la légende.

Répondre

2

Il est possible d'utiliser des couleurs cohérentes et ligne styles entre les différentes intrigues secondaires avec l'approche suivante,

import matplotlib.pyplot as plt 
import numpy as np 

# load your pandas DataFrames df1 and df2 here 

ax = [plt.subplot(211), plt.subplot(211)] 
pars = {'FR': {'color': 'r'}, 
     'stim_current': {'color': 'k'}} 
ls_style = ['dashed', 'solid'] 
for ax_idx, name in enumerate(['FR', 'stim_current']): 
    for df, ls in zip([df1, df2], ls_style): 
     ax[ax_idx].plot(df.index, df[name], ls=ls, **pars[name])