2016-06-05 4 views
2

Das ist wahrscheinlich eine blöde Frage, aber wenn ich die .plot() Funktion verwende, zeichnet sie die Zusammenfassung zweimal auf. Jeder weiß, warum es das tut und wie ich es stoppen kann? pystan.plot()plastan .plot() zeichnet Tracezusammenfassung zweimal auf

Wie Sie sehen können, verwende ich Jupyter-Notebooks, wenn das wichtig ist.

es mit jedem stan Modell geschieht (und auf zwei getrennten Anlagen)

Dieser Code würde das Problem für mich produzieren

import pystan 
import numpy as np 
model_string = """ 
data { 
    int<lower=0> N; 
    int y[N]; 
} 
parameters { 
    real<lower=0, upper=1> theta; 
} 
model { 
    theta ~ beta(1,1); 
    y ~ bernoulli(theta); 
} 
""" 
N = 50 
z = 10 
y = np.append(np.repeat(1, z), np.repeat(0, N - z)) 
dat = {'y':y, 
     'N':N} 

fit = pystan.stan(model_code=model_string, data=dat, iter=1000, warmup=200, thin=1, chains = 3) 
fit.plot() 
+0

Könnten Sie einen minimalen Arbeits Code zur Verfügung stellen? (und nicht nur die Linie mit Handlung)? Danke –

+0

Hinzugefügt etwas Code, der das Problem jetzt erzeugt –

+0

Das passiert mir unter Linux nicht. Hast du irgendwo eine "% matplotlib inline"? (Ich könnte auch vorschlagen, dies auf dem PyStan Issue Tracker zu veröffentlichen: https://github.com/stan-dev/pystan/issues) – ariddell

Antwort

3

Dies wird durch die %matplotlib inline Aussage verursacht wird, mehr Zeichnung als Sie es haben wollen . Die StanFit4Model.plot Methode ruft matplotlib.pyplot.subplot auf, und dieser Aufruf selbst wird eine Zeichnung zeichnen, wenn Ihr Notebook über %matplotlib inline verfügt. Dann gibt die Methode das Objekt Figure zurück. Wenn Sie es nicht erfassen, entscheidet sich Ihr Notebook, es Ihnen als Bild zu zeigen, anstatt den Typ zu drucken, und Sie erhalten die Doppelzeichnung.

Sie können ein einzelnes Diagramm ausgeben, indem Sie den Ausgang Figure erfassen. Ändern Sie den Code aus

fit.plot() 

statt zu

fig = fit.plot()