Как я могу добавить точки данных к моему линейному графику в том же цвете (matplotlib)? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть линейный график, к которому я хотел бы добавить исходные точки данных того же цвета, что и линии (которые подходят по умолчанию). Проблема: когда я делаю это для большого количества идентификаторов или точек данных (также отсутствует), я больше не могу различить, кому принадлежат эти данные.

import pandas as pd
df = pd.DataFrame({'year': ['1988', '1989', '1990', '1988', '1989', '1990', '1988', '1989', '1990'],
                   'id': ['1', '1', '1', '2', '2', '2', '3', '3', '3'],
                   'money': ['5', '7', '8', '8', '3', '3', '7', '8', '10']}).astype(int)

import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()

for i in df.id.unique():
    df[df['id']==i].plot.line(x='year', y='money', ax=ax, label='id = %s'%i)
    df[df['id']==i].plot.scatter(x='year', y='money', ax=ax)
    plt.xticks(np.unique(df.year))   

enter image description here

Вопрос: Как получить доступ к списку цветов по умолчанию для моего plot.line, чтобы использовать его в plot.scatter? Или есть другой, более простой способ выделить данные, которые составляют строки?

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

IIUC, вы можете попробовать, хотя @QuangHoang - лучшее решение:

import pandas as pd
df = pd.DataFrame({'year': ['1988', '1989', '1990', '1988', '1989', '1990', '1988', '1989', '1990'],
                   'id': ['1', '1', '1', '2', '2', '2', '3', '3', '3'],
                   'money': ['5', '7', '8', '8', '3', '3', '7', '8', '10']}).astype(int)

import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()

color = plt.rcParams['axes.prop_cycle'].by_key()['color']

for i in df.id.unique():
    df[df['id']==i].plot.line(x='year', y='money', ax=ax, label='id = %s'%i)
    df[df['id']==i].plot.scatter(x='year', y='money', ax=ax, color=color[i-1])
    plt.xticks(np.unique(df.year))  

Выход: enter image description here

2 голосов
/ 19 июня 2019

В plot.line есть опция marker:

fig, ax = plt.subplots()

for i in df.id.unique():
    df[df['id']==i].plot.line(x='year', 
                              y='money', 
                              marker='o', # this add the data points on the line, with the same color 
                              ax=ax, 
                              label='id = %s'%i)

Вывод:

enter image description here

...