Sono un principiante di Python e desidero tracciare un elenco di valori compresi tra -0,2 e 0,2. Lelenco ha questo aspetto
[...-0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01489985147131656, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088...and so on].
In statistica ho imparato a raggruppare i miei dati in classi per ottenere un grafico utile per un istogramma, che dipende da una dimensione così grande dati.
Come posso aggiungere classi in Python al mio grafico?
Il mio codice è
plt.hist(data)
e listogramma ha il seguente aspetto
Ma dovrebbe essere mg src = “https://i.stack.imgur.com/k5rwR.png” alt = “inserisci qui la descrizione dellimmagine” title = “Solo un esempio: le scale sono diverse!”>
Commenti
- Questo non è chiaro. Stai chiedendo come raggruppare i dati o come tracciare i dati raggruppati?
- @ Stephen Rauch: Sto chiedendo di raggruppare i dati con plt.hist () o in un altro modo. Dopo aver raggruppato i dati voglio realizzare il grafico. @ Media: plt.hist (cum_returns_10_5, bins = range (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) NameError: name ' binwidth ' non è definito plt.hist (data, bins = range (min (data), max (data) + binwidth , bin width)) La tua soluzione produce un errore (guarda sopra).
- Non dovresti inserire queste informazioni in una risposta. Puoi commentare, modificare la tua domanda o entrambi.
- benvenuto nella community @Tom, usa i commenti. il motivo per cui non funziona è che devi impostarli. sono variabili tipiche a scopo illustrativo, devi impostare dei valori invece di loro.
- Grazie per questo suggerimento @Media! @Stephen Rauch: Saresti così gentile e mi daresti un commento su come raggruppare i dati in Python che sono scritti in un elenco in modo che possano essere tracciati? Grazie per il tuo aiuto 🙂
Risposta
Il tuo istogramma è valido, ma ha troppi contenitori per essere utile.
Se desideri un numero di contenitori equidistanti, puoi semplicemente passare quel numero tramite bins
argomento di plt.hist
, ad esempio:
plt.hist(data, bins=10)
Se desideri che i tuoi contenitori abbiano bordi specifici, puoi passarli come elenco a bins
:
plt.hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100])
Infine, puoi anche specificare un metodo per calcolare automaticamente i bordi del bin, ad esempio auto
(i metodi disponibili sono specificati nella documentazione di numpy.histogram_bin_edges
):
plt.hist(data, bins="auto")
Esempio di codice completo
import matplotlib.pyplot as plt import numpy as np # fix the random state for reproducibility np.random.seed(19680801); # sum of 2 normal distributions n = 500; data = 10 * np.random.randn(n) + 20 * np.random.randn(n) + 20; # plot histograms with various bins fig, axs = plt.subplots(1, 3, sharey=True, tight_layout=True, figsize=(9,3)); axs[0].hist(data, bins=10); axs[1].hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100]); axs[2].hist(data, bins="auto");
Risposta
Devi specificare la dimensione del cestino , se io “v Abbiamo capito la domanda. Come indicato qui .
Puoi fornire un elenco con i limiti dei bin.
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])
Se vuoi solo che siano equamente distribuiti, puoi semplicemente usare range:
plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))
Puoi anche prendere uno sguardo a qui e qui .
Commenti
- Se vuoi che siano equamente distribuiti, cè un modo più semplice: invece di dare i limiti dei bin come argomento, basta dire a matplotlib quanti contenitori vuoi, ad es.
plt.hist(data, bins=20)
. - @Xavier Grazie per la tua risposta, immagino che potresti voler inviare la tua risposta. Come avrai notato, la domanda non è ancora chiusa 🙂