/ / Działka więcej niż ramka danych na tej samej figurze pandy - python, pandy, wykres

Narysuj więcej niż ramka danych na tej samej pandzie postaci - python, panda, fabuła

Mam listę wielu zagregowanych ramek danych o identycznej strukturze.

Chciałbym narysować dwie kolumny z każdej ramki danych na tym samym wykresie.

Użyłem tego fragmentu kodu, ale daje mi osobny wykres dla każdej ramki danych:

# iterate through a list
for df in frames:
df.plot(x="Time", y="G1", figsize=(16, 10))
plt.hold(True)
plt.show()

Odpowiedzi:

2 dla odpowiedzi № 1

Jeśli każdy zestaw jest zaindeksowany, możesz po prostu połączyć je wszystkie i narysować je bez konieczności iteracji.

# If not indexed:
# frames = [df.assign(sample=i) for i, df in enumerate(frames)]
df = pd.concat(frames).pivot(index="Time", columns="sample", values="G1")
df.plot(figsize=(16, 10));

Pomaga to upewnić się, że Twoje dane są dopasowane i plt.hold jest przestarzały w matplotlib 2.0.


2 dla odpowiedzi nr 2

Jak zauważyłeś, pandas.DataFrame.plot nie ma wpływu na matplotlib hold parametr, ponieważ za każdym razem tworzy nową figurę. Sposobem na obejście tego jest przejście ax parametr jawnie. Jeśli ax nie jest None, mówi DataFrame nakreślić konkretny zestaw osi zamiast tworzyć nową figurę samodzielnie.

Możesz przygotować zestaw osi przed czasem lub użyć wartości zwrotnej pierwszego połączenia do df.plot. Pokazuję to drugie podejście tutaj:

ax = None
for df in frames:
ax = df.plot(x="Time", y="G1", figsize=(16, 10), ax=ax)
plt.hold(True)
plt.show()