2016-07-29 13 views
1

Ich habe eine Pandas-Serie ts mit Index in datetime und seine Auflösung ist 1s; Diese Zeitreihe umfasst 23 Stunden. Ich versuche, dies in mehreren Diagrammen mit einem Config-Parameter chart_sec (wie viele Sekunden in einem Diagramm angezeigt) mit einer festen dpi = 20; Die Auflösung reicht möglicherweise nicht aus, um jeden einzelnen Punkt von ts im Diagramm darzustellen.matplotlib aggregieren mehrere Punkte einer Serie innerhalb eines Pixels

import pyplot as plt 
ax = plt.subplot() 
dates = [dt.to_datetime() for dt in ts.index] 
ax.plot_date(dates, ts, fmt='k-', color='grey') 
plt.savefig(fname, dpi=20) 

Frage 1, weiß ich nicht, welchen Wert ich bin Plotten den obigen Code verwenden (es ist der Wert des ersten oder letzten Punkt in einem Pixel?) Frage 2, wenn ich Werte summieren möchten von Punkten innerhalb eines Pixels, wie geht das?

+0

Hallo, ich bin mir nicht sicher, was Sie hier meinen, indem Sie "mehrere Punkte in einem Pixel" haben. Sie sollten nur ein Diagramm mit 7200 Punkten bekommen - abhängig von der Vergrößerung, die Sie möglicherweise nicht klar lösen können. Hast du ein Beispiel 'ts' und eine Beispielausgabe, die du posten kannst? –

+0

Wenn Sie versuchen, eine Figur zu speichern und in der Lage zu sein, jeden Punkt zu unterscheiden, besteht ein Trick darin, eine große Figurengröße zu verwenden (zB 'plt.figure (figsize = (70,70))') und als Vektortyp zu speichern (pdf) oder hohe dpi. Wenn Sie sich im Standardfenster von matplotlib ansehen, können Sie die Ansicht vergrößern. –

+0

@JRichardSnape danke für die Antwort. Ich habe die Frage bearbeitet; Die Sicherungsdatei hat eine feste dpi, die möglicherweise nicht ausreicht, um jeden Punkt von ts in einem Diagramm darzustellen. Hoffe das kann meine Fragen klären. – Everest

Antwort

0

Eine Idee, wenn Sie die Punkte unterscheiden müssen, ist es, die Figur in großem Format und hoher dpi zu speichern. Ich vermute ein bisschen, wie Ihre Daten aus Ihrem Beispiel aussehen.

import pandas as pd 
import matplotlib.pyplot as plt 

ts = pd.DataFrame(50*pd.np.random.rand(7200)+pd.np.array(range(7200)), 
        index=pd.DatetimeIndex(freq='s',start='01-01-2016',periods=7200)) 

plt.figure(figsize=(35,35)) 
# will be a <matplotlib.figure.Figure object> 
dates = [dt.to_datetime() for dt in ts.index] 
plt.plot_date(dates, ts, fmt='k-', ms=0, color='grey') 
# will be a [<matplotlib.lines.Line2D object>] 
plt.savefig('hires.png', dpi=600) 

Dies erzeugt eine fast 3MB PNG-Datei, die wie eine etwas laut geraden Linie aussieht, wenn betrachtet gezoomt, aber wenn Sie zu 100% vergrößern können Sie die einzelnen Punkte sehen, wie unten dargestellt:

Small portion of line graph zoomed to 100%

Noch nicht brillant gut unterschieden, aber Sie können mit der Bildgröße vs. dpi spielen, um Ihren individuellen Anforderungen gerecht zu werden.

N.B. Wenn Sie im normalen Matplotlib-Zahlenfenster anzeigen möchten (anstatt zu speichern), können Sie heranzoomen. Sie können auch die vergrößerte Ansicht speichern, die genau das speichert, was Sie auf dem Bildschirm sehen.

Verwandte Themen