Matplotlib - построение сгруппированных значений с помощью цикла for - PullRequest
2 голосов
/ 15 марта 2019

Я пытаюсь построить график, сгруппированный по значениям столбца, используя цикл for, не зная количества уникальных значений в этом столбце.

Ниже приведен пример кода (без цикла for) ижелаемый результат.

Мне бы хотелось, чтобы каждый график имел разный цвет и маркер (как показано ниже).


Это код:

import pandas as pd
from numpy import random

df = pd.DataFrame(data = random.randn(5,4), index = ['A','B','C','D','E'],
columns = ['W','X','Y','Z'])

df['W'] = ['10/01/2018 12:00:00','10/03/2018 13:00:00',
           '10/03/2018 12:30:00','10/04/2018 12:05:00',
           '10/08/2018 12:00:15']

df['W']=pd.to_datetime(df['W'])

df['Entity'] = ['C201','C201','C201','C202','C202']

print(df.head()) 

fig, ax = plt.subplots()
df[df['Entity']=="C201"].plot(x="W",y="Y",label='C201',ax=ax,marker='x')
df[df['Entity']=="C202"].plot(x="W",y="Y",label='C202',ax=ax, marker='o')

Это вывод:

enter image description here

1 Ответ

1 голос
/ 15 марта 2019

Сначала вы можете узнать уникальные значения вашего df['Entity'], а затем зациклить их. Чтобы автоматически генерировать новые маркеры для каждой сущности, вы можете определить порядок некоторых маркеров (скажем, 5 в ответе ниже), которые будут повторяться через marker=next(marker).


Полный минимальный ответ

import itertools
import pandas as pd
from numpy import random
import matplotlib.pyplot as plt

marker = itertools.cycle(('+', 'o', '*', '^', 's')) 
df = pd.DataFrame(data = random.randn(5,4), index = ['A','B','C','D','E'],
columns = ['W','X','Y','Z'])

df['W'] = ['10/01/2018 12:00:00','10/03/2018 13:00:00',
           '10/03/2018 12:30:00','10/04/2018 12:05:00',
           '10/08/2018 12:00:15']

df['W']=pd.to_datetime(df['W'])

df['Entity'] = ['C201','C201','C201','C202','C202']

fig, ax = plt.subplots()

for idy in np.unique(df['Entity'].values):
    df[df['Entity']==idy].plot(x="W",y="Y", label=idy, ax=ax, marker=next(marker))

plt.legend()
plt.show()

enter image description here

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