Sto cercando di ottenere un istogramma con i dati già registrati. Ho cercato di utilizzare bar()
per questo, ma non riesco a capire come renderlo un istogramma scalato like this one from the examples, invece di un istogramma pieno.Matplotlib - Istogramma a gradini con dati già registrati
risposta
Si potrebbe barare, compensando i dati e l'utilizzo di plot
invece:
from matplotlib import pyplot
import numpy as np
#sample data:
x = np.arange(30)
y = np.cumsum(np.arange(30))
#offset the x for horizontal, repeat the y for vertical:
x = np.ravel(zip(x,x+1))
y = np.ravel(zip(y,y))
pyplot.plot(x,y)
pyplot.savefig('plt.png')
la trama:
Dalla sorgente di accompagnamento al http://matplotlib.sourceforge.net/examples/pylab_examples/histogram_demo_extended.html
ecco come hanno tratto che grafico:
[snip]
e il bit che si desidera sembra essere
pylab.hist(x, bins=bins, histtype='step')
^
right here
Edit: se vuoi sapere come hist() funziona, guardare la fonte - è definito in matplotlib/axes.py partire dalla riga 7407.
Guardando la linea 7724,
x = np.zeros(2*len(bins), np.float)
y = np.zeros(2*len(bins), np.float)
per N barre, bin sono un numpy.ndarray di N + 1 valori, essendo i bordi per ogni barra. Essi doppia i valori per ogni barra (questo è ciò Fraxel sta facendo con np.ravel sotto) e spostare la datapoints mezza barra a sinistra per centrarli
x[0::2], x[1::2] = bins, bins
x -= 0.5*(bins[1]-bins[0])
impostare l'altezza di ciascuna barra, gemellata ma spostati di una (rispetto ai valori x) per produrre l'effetto passo
# n is an array of arrays containing the number of items per bar
patches = [] # from line 7676
for m, c in zip(n, color):
y[1:-1:2], y[2::2] = m, m
patches.append(self.fill(x, y, closed=False, edgecolor=c, fill=False))
e il bit self.fill
è ciò che attira effettivamente le linee.
Per quanto ho capito l'esempio il depliant di dati cestinate già. Ho già raccolto dati, quindi 'hist()' non aiuta – madtowneast
-1, non si applica alla domanda –
@Jonas Wielicki: il codice dato risulta nell'immagine che ha chiesto. Come non è applicabile? –
La soluzione più semplice è quella di convertire il set di dati categorizzata a un non-categorizzata set di dati ponderati (con numero di elementi == numero di contenitori). Il set di dati non vincolato consisterebbe in valori di dati uguali ai centri del contenitore e pesi equivalenti ai valori in ciascun contenitore. Per esempio diciamo che i dati categorizzata è,
binedges = [0.0, 1.0, 2.0, 3.0]
ybinned = [11., 22., 33.]
Il corrispondente set di dati ponderato sarebbe,
y = [0.5, 1.5, 2.5]
weights = [11., 22., 33.]
Si noti che la scelta di utilizzare il centro bin è arbitraria, è possibile utilizzare qualsiasi punto all'interno di un bidone. Una volta generato il set di dati non abbinati, è possibile utilizzare il normale tracciato dell'istogramma matplotlib (ad esempio Axes.hist).
Un esempio di implementazione in Python segue:
def plot_binned_data(axes, binedges, data,
*args, **kwargs):
#The dataset values are the bin centres
x = (binedges[1:] + binedges[:-1])/2.0
#The weights are the y-values of the input binned data
weights = data
return axes.hist(x, bins=binedges, weights=weights,
*args, **kwargs)
ora è possibile avere pieno accesso a tutti gli assi.Opzioni di tracciamento dell'istogramma, incluso histtype="step"
per creare l'istogramma a gradini che si desiderava.
Un esempio di utilizzare questa funzione sarebbe,
import numpy
import matplotlib.pyplot as plt
#Create a dataset
dataset = numpy.random.normal(size=100)
#Bin the dataset
binedges = numpy.linspace(-5.0, 5.0, num=10)
y, binedges = numpy.histogram(dataset, binedges)
#Plot the dataset
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
plot_binned_data(ax, binedges, y, histtype="step")
plt.show()
Speranza che aiuta!
Per qualche motivo, l'ultimo cestino non viene chiuso correttamente quando lo provo. Non è visibile dalle risposte precedenti se viene mostrata l'ultima riga, quindi ho deciso di creare una mia funzione, che fa ciò che voglio.
def make_bar_contour_plot(ax,x_input,y_input):
x = list(np.ravel(zip(x_input[:-1],x_input[:-1]+1)))[1:]
x += [x[-1]+20] + [300]
y = list(np.ravel(zip(y_input,y_input))) +[0]
ax.plot(x,y,ls='steps')
return ax
Il 20
e 300
che vengono aggiunti sono la mia binsize e termina il valore, rispettivamente, e hanno bisogno di essere regolata, se qualcuno vuole utilizzare questo. x_input
e y_input
sono i valori restituiti da np.histogram
. Il mio grafico risultante (in blu il contorno, tracciata con la funzione di cui sopra in rosso, Il barplot dei dati stessi.):
- 1. Istogramma animato Matplotlib
- 2. matplotlib: etichette istogramma e bin
- 3. grafico Trama dai dati di istogramma in matplotlib
- 4. modifica intervallo x predefinito in istogramma matplotlib
- 5. istogramma grafico di datetime.time python/matplotlib
- 6. Disegno linea media in istogramma (matplotlib)
- 7. facecolor kwarg per Istogramma impilato Matplotlib
- 8. Istogramma in matplotlib, tempo sull'asse x
- 9. Istogramma da dati che è già cestinato, Ho bidoni e valori di frequenza
- 10. Etichettatura un bidone matplotlib istogramma con una freccia
- 11. Istogramma Matplotlib con raccoglitore di raccolta per valori elevati
- 12. arresto Autofac modulo registrazione già registrati
- 13. Raggruppa elementi di un elenco con un python a gradini?
- 14. Istogramma impilato da conteggi già riepilogati utilizzando ggplot2
- 15. R - istogramma all'interno istogramma
- 16. Trucchi per ottenere istogramma cumulativo ordine inverso in matplotlib
- 17. Dati principali vs NSUserDefaults per dati utente registrati
- 18. istogramma semplice di trama pitone dati dati in rilievo
- 19. Visualizzazione di grafici a dispersione con punti sovrapposti in matplotlib
- 20. Panda: istogramma a larghezza fissa
- 21. Grafico a barre raggruppato con ggplot2 e dati già tabulati
- 22. Analisi istogramma a 2 fattori
- 23. istogramma numpy con 3 variabili
- 24. Ottenere informazioni per bidoni in funzione matplotlib istogramma
- 25. pandi indice frame di dati trama istogramma
- 26. Grafici di tipo distribuzione (istogramma/kde) con dati ponderati
- 27. R: Generare istogramma dai conti di dati
- 28. Visualizzazione di un istogramma di dati immagine
- 29. istogramma ggplot2 con curva di densità che somma a 1
- 30. Aggiornamento dei dati utente registrati nella sessione
Ho trovato una seconda via. Basta impostare 'ls =" steps "' per 'plot()'. Grazie per la risposta però! – madtowneast
@madtowneast, ti meriti più voti per quel commento. Questa è una caratteristica nascosta. http://matplotlib.org/api/artist_api.html#matplotlib.lines.Line2D.set_linestyle – kratsg