Панды, как иметь другой цвет линии графика - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть фрейм данных,

index block array_size  time
0   2   100 0.102710
1   2   1000    0.356194
2   2   10000   2.884903
3   2   100000  28.484935
4   2   1000000 293.656645
5   2   8000000 91286.889516
6   4   100 0.103323
7   4   1000    0.347484
8   4   10000   2.799290
9   4   100000  27.3598

enter image description here

Я хочу иметь другой цвет для разных значений блока (2 и 4. второй столбец)Мой код для этого графика df.plot(x='array_size', y='time') Как я могу иметь разные цвета для каждой переменной?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Это должно сделать это.

import matplotlib.pyplot as plt

for unq_value in df['block'].unique():
    mask = df['block'] == unq_value
    df_subset = df[mask]
    plt.plot(df_subset['array_size'], df_subset['time'])
plt.show()

Здесь мы находим уникальные значения в столбце блока.Затем установите подмножество данных для каждого уникального значения, а затем постройте отдельно для каждого подмножества данных.

0 голосов
/ 12 сентября 2018

Вы можете просто нарисовать их каждый отдельно с помощью простого groupby, или если вы хотите использовать seaborn, который позволит вам указать столбец для hue

import pandas as pd
import seaborn as sns
import numpy as np

fig, ax = plt.subplots(figsize=(8,4))

for idx, gp in df.groupby('block'):
    gp.plot(x='array_size', y='time', ax=ax, label=idx)
plt.show()

enter image description here

С seaborn (минимум 0,9) вы можете просто сделать:

sns.lineplot(data=df, x='array_size', y='time', hue='block')

Так как у вас много 'blocks' стандартного цветаЦиклер не собирается сокращать это.Вы можете легко настроить это с помощью ax.set_prop_cycle

Пример данных

df = pd.DataFrame({'x': np.tile(np.arange(1,11,1),20),
                   'y': np.random.randint(1,25,200),
                   'block': np.repeat(np.arange(1,21,1),10)})

Код:

fig, ax= plt.subplots(figsize=(8,4))

colors = sns.color_palette("coolwarm", df.block.nunique())
ax.set_prop_cycle('color', colors)

for idx, gp in df.groupby('block'):
    gp.plot(x='x', y='y', ax=ax, legend=False)
plt.show()

enter image description here

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