2017-02-11 3 views
1

Ich versuche, einige grundlegende Plotten von Aktien mit Matplot Lib und ich bin ratlos bei dem Versuch, den Volumen Teil der Handlung zu füllen.Matplotlib - Probleme mit Füllungen

Ich versuche, in zwei separaten Charts (einer über dem anderen) einen Aktienpreis und Volumen zu plotten. Wenn ich zwei geradlinige Linien (ATTEMPT 1 im Code) zeichne, sieht das gut aus - wie man es erwarten würde.

Wenn ich versuche, unter der Volumenlinie (ATTEMPT 2 im Code) zu füllen, sieht das Preisdiagramm vollständig in etwa 5 Pixel breit und es gibt nichts in der zweiten, Volumendiagramm.

Ich nehme an, es ist etwas mit der x-Achse (Datum) Serie als nur explizit in VERSUCH 2.

auch zu tun, ich habe die gleichen Daten in einem Diagramm mit zwei Achsen zu zeichnen versucht. Ich bekomme das gleiche Ergebnis nur innerhalb eines einzigen Diagramms. Ich nehme an, die gleiche Lösung wird das Problem mit beiden Arten von Diagramm beheben?

Kann mir jemand auch einen Tipp geben, wie man den Maßstab der y-Achse verkleinert?

Was fehlt mir?

Danke!

Ben

import datetime 
import numpy as np 
import matplotlib.colors as colors 
import matplotlib.finance as finance 
import matplotlib.dates as mdates 
import matplotlib.ticker as mticker 
import matplotlib.mlab as mlab 
import matplotlib.pyplot as plt 
import matplotlib.font_manager as font_manager 

# get the stock data 
fh = finance.fetch_historical_yahoo('AAPL', (2007, 2, 12), (2011, 2, 12)) 
r = mlab.csv2rec(fh) 
fh.close() 
r.sort() 


# *** ATTEMPT 1: 2 standard line plots ****************************** 
f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False) 
ax1.plot(r.close) 
ax2.plot(r.volume) 
f.subplots_adjust(hspace=0) 


# *** ATTEMPT 2: Fill the volume plot ******************************* 
f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False) 
ax1.plot(r.close) 
ax2.fill_between(r.date,0, r.volume, facecolor='#0079a3', alpha=0.4) 
f.subplots_adjust(hspace=0) 
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False) 

Antwort

1

Da Sie die beiden xaxes verknüpfen, sollten sie die gleichen x-Achse Daten gemeinsam nutzen. Die Verwendung der plot(x,y) Syntax anstelle von plot(y) sollte das Problem lösen.

f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False) 
ax1.plot(r.date,r.close) 
ax2.fill_between(r.date,0, r.volume, facecolor='#0079a3', alpha=0.4) 
f.subplots_adjust(hspace=0) 
+0

Funktioniert gut. Vielen Dank! – BigWinston