17 Stimmen

Matplotlib-Histogramm mit Fehlerbalken

Ich habe ein Histogramm erstellt mit matplotlib unter Verwendung der pyplot.hist() Funktion. Ich möchte eine Poison-Fehler Quadratwurzel der Bin-Höhe hinzufügen ( sqrt(binheight) ) zu den Stäben. Wie kann ich das tun?

Das Rückgabe-Tupel von .hist() enthält return[2] -> eine Liste mit 1 Patch-Objekten. Ich konnte nur herausfinden, dass es möglich ist, Fehler zu Balken hinzuzufügen, die über pyplot.bar() .

23voto

imsc Punkte 7064

In der Tat müssen Sie bar verwenden. Sie können zur Ausgabe von hist und stellen sie als Balken dar:

import numpy as np
import pylab as plt

data       = np.array(np.random.rand(1000))
y,binEdges = np.histogram(data,bins=10)
bincenters = 0.5*(binEdges[1:]+binEdges[:-1])
menStd     = np.sqrt(y)
width      = 0.05
plt.bar(bincenters, y, width=width, color='r', yerr=menStd)
plt.show()

enter image description here

9voto

mtw729 Punkte 163

Alternative Lösung

Sie können auch eine Kombination verwenden aus pyplot.errorbar() y drawstyle Schlüsselwort-Argument. Der nachstehende Code erstellt eine Darstellung des Histogramms unter Verwendung eines gestuften Liniendiagramms. In der Mitte jedes Feldes befindet sich eine Markierung und jedes Feld hat den erforderlichen Poisson-Fehlerbalken.

import numpy
import pyplot

x = numpy.random.rand(1000)
y, bin_edges = numpy.histogram(x, bins=10)
bin_centers = 0.5*(bin_edges[1:] + bin_edges[:-1])

pyplot.errorbar(
    bin_centers,
    y,
    yerr = y**0.5,
    marker = '.',
    drawstyle = 'steps-mid-'
)
pyplot.show()

Meine persönliche Meinung

Wenn die Ergebnisse mehrerer Histogramme in derselben Abbildung dargestellt werden, sind Liniendiagramme leichter zu unterscheiden. Außerdem sehen sie schöner aus, wenn sie mit einer yscale='log' .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X