pandas построить один линейный график с изменением цвета на столбце - PullRequest
1 голос
/ 21 января 2020

Мой фрейм данных

df = pd.DataFrame({'date': ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05'], 'b': ['a', 'a', 'b', 'b', 'c'], 'c': [1,2,3,4,5]})

         date  b  c
0  2018-01-01  a  1
1  2018-01-02  a  2
2  2018-01-03  b  3
3  2018-01-04  b  4
4  2018-01-05  c  5

Я хочу построить линейный график, где X - date, y - c, а цвет линии изменяется на основе на b. Для этого примера должно быть 3 разных цвета, фактические цвета не имеют значения, если они различаются.

Хотя этот будет работать, но он не позволяет изменить цвет по столбцу.

Вывод должен быть одна строка, которая меняет цвет

Ответы [ 2 ]

3 голосов
/ 21 января 2020

В основном вы хотите создать новую серию для каждого значения в столбце b. Один из способов сделать это - сгруппировать по date и b, а затем снять стек b, а другой способ - использовать pivot. Затем просто нанесите результат.

df.pivot(index='date', columns='b').droplevel(0, axis=1).plot(colors='rbc')  
# 'rbc' = ['red', 'blue', 'cyan'] 
# These colors are based on the column ordering, e.g. 'a', 'b', 'c'.

Чтобы быть более точным с цветами:

colors = {
    'a': 'red',
    'b': 'blue',
    'c': 'cyan'
}
(df
 .pivot(index='date', columns='b')
 .droplevel(0, axis=1)[colors.keys()]
 .plot(colors=colors.values())
)

enter image description here

2 голосов
/ 21 января 2020

Давайте попробуем:

_, ax = plt.subplots()
df['date'] = pd.to_datetime(df['date'])
colors = {'a':'r', 'b':'b','c':'c'}
for n, g in df.groupby('b'):
     g.plot('date','c', marker='o', ax=ax, color=colors[n])

ax.legend()

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...