2017-10-28 5 views
2

Ich versuche, ein Histogramm mit Seaborn erstellen, wo die Bins bei 0 beginnen und auf 1 gehen. Allerdings gibt es nur Datum im Bereich von 0,22 bis 0,34. Ich möchte den leeren Raum mehr für einen visuellen Effekt, um die Daten besser darzustellen.Erweitern Sie den Bereich der Bins in Seaborn Histogramm

Ich eröffne mein Blatt mit

import pandas as pd 
import matplotlib as mpl 
import matplotlib.pyplot as plt 
import numpy as np 
import seaborn as sns 

%matplotlib inline 
from IPython.display import set_matplotlib_formats 
set_matplotlib_formats('svg', 'pdf') 

df = pd.read_excel('test.xlsx', sheetname='IvT') 

Hier habe ich eine Variable für meine Liste und erstellen, die ich denke, sollte den Bereich der Bins des Histogramms definieren.

st = pd.Series(df['Short total']) 
a = np.arange(0, 1, 15, dtype=None) 

Und das Histogramm selbst sieht aus wie diese

sns.set_style("white") 
plt.figure(figsize=(12,10)) 
plt.xlabel('Ration short/total', fontsize=18) 
plt.title ('CO3 In vitro transcription, Na+', fontsize=22) 

ax = sns.distplot(st, bins=a, kde=False) 

plt.savefig("hist.svg", format="svg") 
plt.show() 

Histogram

Es schafft eine graphische Darstellung den Bereich Bit in x 0 bis 0,2050 und in y auf 0,04 von -0,04 geht. Ganz anders als ich es erwarte. Ich habe lange nach Google gesucht, kann aber keine Antwort auf mein spezifisches Problem finden.

Schon, vielen Dank für Ihre Hilfe Jungs.

Antwort

1

Es gibt ein paar Ansätze, um hier die gewünschten Ergebnisse zu erzielen. Sie können beispielsweise die Xaxis-Grenzwerte ändern, nachdem Sie das Histogramm gezeichnet haben, oder den Bereich anpassen, über den die Bins erstellt werden.

import seaborn as sns 

# Load sample data and create a column with values in the suitable range 
iris = sns.load_dataset('iris') 
iris['norm_sep_len'] = iris['sepal_length']/(iris['sepal_length'].max()*2) 
sns.distplot(iris['norm_sep_len'], bins=10, kde=False) 

enter image description here

Veränderung der xaxis Grenzen (die Behälter sind nach wie vor über den Bereich Ihrer Daten erstellt):

ax = sns.distplot(iris['norm_sep_len'], bins=10, kde=False) 
ax.set_xlim(0,1) 

enter image description here

Erstellen Sie die Behälter über den Bereich von 0 bis 1:

sns.distplot(iris['norm_sep_len'], bins=10, kde=False, hist_kws={'range':(0,1)}) 

enter image description here

Da der Bereich für die Behälter größer ist, müssen Sie jetzt mehrere Behälter verwenden, wenn Sie die gleiche Binweite wie beim Einstellen der Xlim haben wollen:

sns.distplot(iris['norm_sep_len'], bins=45, kde=False, hist_kws={'range':(0,1)}) 

enter image description here

+0

Vielen Dank. Das hat den Trick gemacht. Gibt es einen Weg, könnte ich auch das folgende Argument verwenden, um Grenzen um die Bars zu bekommen? hist_kws = dict (Edgecolor = "k", Linienstärke = 2) – Jul

+0

@Jul 'hist_kws' sendet die Argumente an die zugrunde liegende Histogrammfunktion von Matplotlib. Sie können alle Argumente anzeigen, die Sie übergeben können, indem Sie die Dokumentation lesen: 'import matplotlib.pyplot as plt; ? plt.hist' In diesem Fall möchten Sie 'histtype' als' 'bar'' angeben. Vergiss nicht, diese Antwort zu akzeptieren und zu verbessern, denn es ist dein Problem gelöst. –

+0

Wenn ich meinen Code für das Histogramm ändern, um ax = sns.distplot (st, bins = 34, kde = False, Farbe = '# 007b7f', histtype = 'bar', hist_kws = dict (Edgecolor = "k", Linienbreite = 2)) es gibt mir eine Fehlermeldung, die besagt: _distplot() hat ein unerwartetes Schlüsselwort argument 'histtype'_. Oder muss ich den Histotyp in Matplotlib ändern? – Jul

Verwandte Themen