Grafico dellistogramma con plt.hist ()

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 inserisci la descrizione dellimmagine qui

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"); 

inserisci qui la descrizione dellimmagine

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 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *