#python #pandas #matplotlib #multi-index #line-plot
#python #pandas #matplotlib #многоиндексный #line-plot
Вопрос:
У меня есть следующий фрейм данных:
>>> mean_traf_tie
a d c
0.22 0.99 0.11 22
0.23 21
0.34 34
0.46 45
0.44 0.99 0.11 45
0.23 65
0.34 66
0.46 68
0.50 0.50 0.11 22
0.23 12
0.34 34
0.46 37
...
Я хочу создать график из этого фрейма данных таким образом, чтобы c было осью X, y будет средней скоростью, а линии будут соответствовать столбцам a и d, так что, например, одна строка будет для a = 0,22 и d = 0,99, x будет cи y будет средней скоростью, а затем 2-я строка будет для a = 0,44 и d = 0,99 и т. Д.
Я пытался сделать это так:
df.plot()
(значения отличаются в исходном фрейме данных).
как вы можете видеть, по какой-то причине он отображает по оси x a, d и создает только одну строку.
Я попытался исправить это следующим образом:
df.unstack(level=0).plot(figsize=(10,6))
но затем я получил очень странный график с правильными линиями по a и d, но неправильной осью x:
Как вы можете видеть, он каким-то образом отображает значения a, d, но это не то, что я хочу — я хочу, чтобы это были столбцы c, а затем создавать строки на основе столбцов a, d, которые предполагают создание непрерывной строки. У меня тоже есть trid:
df[('mean_traf_tie')].unstack(level=0).plot(figsize=(10,6))
plt.xlabel('C')
plt.ylabel('mean_traf_tie')
Желаемый результат будет иметь столбец c в качестве оси x, значение mean_traf_tie в качестве оси y, а строки будут сгенерированы bseed для столбцов a и d (строка для 0.22 и 0.99, строка для 0.44 и 0.99 и т.д.).
Ответ №1:
Обновление: мне удалось просмотреть его, объединив два столбца индекса в один, прежде чем строить график следующим образом:
df['a,d'] = list(zip(df.a, df.d))
df=df.groupby(['a,d','C']).mean()
df.unstack(level=0).plot(figsize=(10,6))
legenss по-прежнему не идеалистичен, но я получил линии и оси так, как хотел.
Если у кого-нибудь есть лучшая идея, как это сделать с исходными столбцами, я все еще открыт для изучения.