Если вы хотите использовать только pandas
и matplotlib
, это должно работать:
#sorting dataframe along record_number column
df = df.sort_values('record_number')
#creating an index group for each separate set of rows with the same set_name
df['gg'] = (df['step_name'] != df['step_name'].shift()).cumsum()
#associating a color to the step_name
cols = {'a':'b', 'b':'g', 'c':'r', 'd':'c'}
#plotting
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(12, 8))
for (sn, gidx), sdf in df.groupby(['step_name', 'gg']):
ax1.plot(sdf['record_number'], sdf['current'], c=cols[sn], label=sn)
ax2.plot(sdf['record_number'], sdf['capacity'], c=cols[sn], label=sn)
#setting axis labels
plt.xlabel('record_number')
ax1.set_ylabel('current')
ax2.set_ylabel('capacity')
#making the legend, removing repeated entries
handles, labels = ax2.get_legend_handles_labels()
f_h = []
f_l = []
for h, l in zip(handles, labels):
if l not in f_l:
f_h.append(h)
f_l.append(l)
plt.legend(f_h, f_l)
plt.show()
Этот код выдает, используя ваши образцы данных:
![enter image description here](https://i.stack.imgur.com/Ey7EM.png)
pandas
Функции построения графика дают хорошие результаты, но не очень настраиваемые.Для создания сложных графиков, как правило, лучше использовать matplotlib
функции.
Здесь я создал дополнительную строку df['gg']
, чтобы пометить каждую группу последовательных строк одним и тем же 'step_name'
с различным индексом, поэтомучто я могу группировать по нему при построении (в противном случае результатом была бы одна линия для каждого цвета).
Кроме того, вам нужно связать цвет для каждой буквы в столбце 'step_name'
(я сделал этоопределив col
словарь).См. здесь , чтобы узнать форматы, распознаваемые matplotlib для указания цвета.