pandas, matplotlib: способ назначить одинаковые цвета, стили линий для одинаковых меток столбцов на подзаголовках?

У меня есть несколько фреймов данных, показывающих объекты с некоторыми похожими переменными (т. е. именами столбцов), которые меняются со временем, и я рисую их на подграфиках.

>>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

Есть ли способ назначить стиль линии по имени столбца, чтобы, например, FR, stim_current и self_excitation имели одинаковые цвета на каждом участке? Скажем, я хочу, чтобы FR был синим и жирным, ток стимуляции был черным, а самовозбуждение - зеленым. Я также хотел бы, чтобы все различия между фреймами данных отображались другим цветом на каждом подграфике. В идеале я мог бы также переупорядочить столбцы фрейма данных, чтобы все, что отображается в каждом фрейме данных, было в легенде сверху, а то, что варьируется, попадало бы в нижнюю часть легенды.


person steeles    schedule 11.03.2015    source источник


Ответы (1)


Можно использовать одинаковые цвета и стили линий между различными подграфиками со следующим подходом:

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])
person rth    schedule 11.03.2015