En utilisant pandas
je peux facilement faire un tracé linéaire:
import pandas as pd
import numpy as np
%matplotlib inline # to use it in jupyter notebooks
df = pd.DataFrame(np.random.randn(50, 4),
index=pd.date_range('1/1/2000', periods=50), columns=list('ABCD'))
df = df.cumsum()
df.plot();
Mais je ne sais pas comment tracer également les données sous forme de points sur les lignes, comme dans cet exemple:
Cet exemple matplotlib semble suggérer la direction, mais je ne trouve pas comment le faire en utilisant pandas capacités de traçage. Et je suis particulièrement intéressé à apprendre à faire avec pandas parce que je travaille toujours avec des cadres de données.
Des indices?
Vous pouvez utiliser le style
kwarg pour le df.plot
commande. De la docs :
style: liste ou dict
style de ligne matplotlib par colonne
Vous pouvez donc définir un style de ligne pour toutes les lignes ou un style différent pour chaque ligne.
par exemple. cela fait quelque chose de similaire à ce que vous avez demandé:
df.plot(style='.-')
Pour définir un marqueur et un style de ligne différents pour chaque ligne, vous pouvez utiliser une liste:
df.plot(style=['+-','o-','.--','s:'])
Vous pouvez également transmettre le markevery
kwarg à la commande de tracé de matplotlib
pour ne dessiner que des marqueurs à un intervalle donné.
df.plot(style='.-', markevery=5)
Vous pouvez utiliser l'argument markevery
dans df.plot()
, comme suit:
df = pd.DataFrame(np.random.randn(1000, 4), index=pd.date_range('1/1/2000', periods=1000), columns=list('ABCD'))
df = df.cumsum()
df.plot(linestyle='-', markevery=100, marker='o', markerfacecolor='black')
plt.show()
markevery
accepterait une liste de points spécifiques (ou de dates), si c'est ce que vous voulez.
Vous pouvez également définir une fonction pour vous aider à trouver le bon emplacement:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randn(1000, 4), index=pd.date_range('1/1/2000', periods=1000), columns=list('ABCD'))
df = df.cumsum()
dates = ["2001-01-01","2002-01-01","2001-06-01","2001-11-11","2001-09-01"]
def find_loc(df, dates):
marks = []
for date in dates:
marks.append(df.index.get_loc(date))
return marks
df.plot(linestyle='-', markevery=find_loc(df, dates), marker='o', markerfacecolor='black')
plt.show()