Раскрасьте разные значения в кадре данных Pandas другим цветом в точке рассеивания с помощью Matplotlib - PullRequest
0 голосов
/ 18 июня 2020

У меня есть df, например:

Date                   Sig
2020-06-16 09:00:00    1
2020-06-16 13:00:00    0
2020-06-16 17:00:00   -1
2020-06-16 21:00:00   -1
2020-06-17 01:00:00    0
2020-06-17 05:00:00    1
2020-06-17 09:00:00    1
2020-06-17 13:00:00    0
2020-06-17 17:00:00    0
2020-06-17 21:00:00    -1

Я пытаюсь сделать простой график рассеяния в Matplotlib с индексом в качестве оси X и столбцом Sig на Y, но показывает только единицы и -1, причем 1 окрашен в синий цвет, а -1 - в красный. Но я не хочу, чтобы 0 строка была исключена из диаграммы рассеяния, если это имеет смысл.

Я, очевидно, могу просто сделать диаграмму рассеяния, таким образом, 'plt.scatter (x = df.index, y = df ['Sig']) ', но это, конечно же, отображает все числа в Sig и не кодирует их цветом.

Любая помощь будет очень признательна. Ура

Ответы [ 2 ]

1 голос
/ 18 июня 2020

plt.scatter поддерживает итерацию цветов, поэтому вы можете фактически дать каждой точке независимый цвет.

Здесь у нас просто будет словарь с тремя вариантами, продиктованными знаком ваших данных:

colors = {-1: "red", 0: "black", +1: "blue"}
plt.scatter(x=df.index, y=df["Sig"], color=[colors[sign] for sign in df["Sig"]])
1 голос
/ 18 июня 2020

Вы можете выполнить группировку по отфильтрованным данным следующим образом:

# datetime data type is recommended
df['Date'] = pd.to_datetime(df['Date'])

colors = ['r','b']
fig, ax = plt.subplots()
for c, (k,d) in zip(colors, df[df['Sig']!=0].groupby('Sig')):
    d.plot.scatter(x='Date',y='Sig',label=k, ax=ax, c=c)

Вывод:

enter image description here

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