2017-03-21 7 views
4

Also berechnete ich das sichere Intervall für eine Reihe von Daten mit einer Normalverteilung und ich möchte es als Whisker auf dem Balkendiagramm der Daten bedeuten. Ich habe versucht, yerr-Parameter für die plt.bar zu verwenden, aber es berechnet den Standardabweichungsfehler nicht das sichere Intervall. Ich will die gleichen Whiskersvisualisierungen auf dem Balkendiagramm. Die zuversichtlich Intervalle ich habe, ist:Harte Codierung Konfidenzintervall als Whiskers in Balkendiagramm

[(29.600,87, 39.367,28), (37.101,74, 42.849,60), (33.661,12, 41.470,25), (46.019,20, 49.577,80)]

mein Code Hier habe ich versucht, die Yerr-Parameter mit den selbstbewussten Levels zu versorgen, aber nicht so gut.

means=[np.mean(df.iloc[x]) for x in range(len(df.index))] 

CI=[st.t.interval(0.95, len(df.iloc[x])-1, loc=np.mean(df.iloc[x]), scale=st.sem(df.iloc[x])) for x in range(len(df.index))] 

plt.figure() 

plt.bar(x_axis, means, color='r',yerr=np.reshape(CI,(2,4)) 

plt.xticks(np.arange(1992,1996,1)) 

Hier ist das Grundstück Ich erhalte:

enter image description here

Antwort

2

Die folgende Beschreibung ist zu tun, was Sie wollen (unter der Annahme, dass Ihre Fehler sind symmetrisch, wenn nicht, dann Sie mit @ ImportanceOfBeingErnest Antwort gehen sollte); die Handlung würde wie folgt aussehen:

enter image description here

Der Code, der es mit einigen Inline-Kommentare produziert:

import matplotlib.pyplot as plt 

# rough estimates of your means; replace by your actual values 
means = [34500, 40000, 37500, 47800] 

# the confidence intervals you provided 
ci = [(29600.87, 39367.28), (37101.74, 42849.60), (33661.12, 41470.25), (46019.20, 49577.80)] 

# get the range of the confidence interval 
y_r = [means[i] - ci[i][1] for i in range(len(ci))] 
plt.bar(range(len(means)), means, yerr=y_r, alpha=0.2, align='center') 
plt.xticks(range(len(means)), [str(year) for year in range(1992, 1996)]) 
plt.show() 
+1

Danke !! Das habe ich getan –

0

Das yerr Argument bar verwendet werden können, um die Fehler als Fehlerbalken zu zeichnen. Die Fehler sind definiert als die Abweichung von einem Wert, d. H. Häufig sind Mengen in der Form y ± err angegeben. Dies bedeutet, dass das Vertrauensintervall (y-err, y+err) wäre.
Dies kann invertiert werden; Bei einem Konfidenzintervall (a, b) und einem Wert y wären die Fehler y-a und b-y.

In einem Matplotlib-Balkendiagramm kann das Fehlerformat scalar | N, Nx1 or 2xN array-like lauten. Da wir nicht wissen können, ob der y Wert im Intervall symmetrisch ist und da er für verschiedene Realisierungen (Balken) unterschiedlich sein kann, müssen wir hier den 2 x N -Format wählen.

Der folgende Code zeigt, wie das geht.

import numpy as np 
import matplotlib.pyplot as plt 

# given some mean values and their confidence intervals, 
means = np.array([30, 100, 60, 80]) 
conf = np.array([[24, 35],[90, 110], [52, 67], [71, 88]]) 

# calculate the error 
yerr = np.c_[means-conf[:,0],conf[:,1]-means ].T 
print (yerr) # prints [[ 6 10 8 9] 
      #   [ 5 10 7 8]] 

# and plot it on a bar chart 
plt.bar(range(len(means)), means, yerr=yerr) 
plt.xticks(range(len(means))) 
plt.show() 

enter image description here

+1

Wie üblich, wenn jemand downvotes, sie die Gründe erklären sollte, so dass die Antwort kann verbessert werden. – ImportanceOfBeingErnest

+0

Scheint mir gut. Ich habe es aufgewertet, erstens, weil es die Frage beantwortet, und zweitens ist es allgemeiner als das, was ich gepostet habe. Ich nehme symmetrische Fehler an, dann wird es etwas einfacher ... – Cleb

+0

Danke! Ich habe den Fehler so modifiziert, dass er symmetrisch ist, wie Cleb darauf hingewiesen hat. –

Verwandte Themen