2017-11-25 1 views
-1

Ich versuche, 3 Zahlen der normalen Verteilung von Publikationen zu plotten, aber ich bekomme nur eine gute Figur (UK). Die verbleibenden zwei (USA und JAPAN) haben eine normale Kurve, die unvollständig ist.Angepasste Verteilung wird geschnitten, wenn mehrere Plots erstellt werden

Ich passte die Kurven an Histogramme an, so dass man sagen konnte, dass jede Figur zwei Graphen enthalten muss, d. H. Ein Histogramm und eine Gaußsche Verteilung.

Bitte sehen Sie sich einen Teil meines Codes an und lassen Sie mich wissen, wie Sie das beheben können. Ich bin sehr offen für Vorschläge, danke.

Meine Matplotlib Zahlen: fitted distribution, fitted distribution, fitted distribution

for item in totalIPs: 
    USA=totalIPs[18] 
    JAPAN=totalIPs[10] 
    UK=totalIPs[17] 
    AUSTRALIA=totalIPs[0] 

#print(USA) 
#print(JAPAN) 
#print(UK) 
#print(AUSTRALIA) 
#print('done') 

#print(country) 
#print(ipFirmnames) 
#print(totalIPs) 
#print("done")  

#Calculating mean and standard deviation 
#from sublists in country list of lists 
#i could write a function for this but dont know how 

mu_USA=statistics.mean(USA) 
mu_JAPAN=statistics.mean(JAPAN) 
mu_UK=statistics.mean(UK) 

std_USA=statistics.stdev(USA) 
std_JAPAN=statistics.stdev(JAPAN) 
std_UK=statistics.stdev(UK) 

plt.figure(1) 
plt.hist(USA, bins=10, normed=True, alpha=0.6, color='g') 

plt.figure(2) 
plt.hist(JAPAN,bins=10,normed=True,alpha=0.6, color ='g') 

plt.figure(3) 
plt.hist(UK, bins=10,normed=True, alpha=0.6, color = 'g') 

standardize_USA=(np.array(USA)-mu_USA)/std_USA 
standardize_JAPAN=(np.array(JAPAN)-mu_JAPAN)/std_JAPAN 
standardize_UK=(np.array(UK)-mu_UK)/std_UK 

xmin, xmax = plt.xlim() 

x1=np.linspace(xmin, xmax, 100) 
x2=np.linspace(xmin, xmax, 100) 
x3=np.linspace(xmin, xmax, 100) 

fitted_pdf_USA=ss.norm.pdf(x1,mu_USA, std_USA) 
fitted_pdf_JAPAN=ss.norm.pdf(x3,mu_JAPAN, std_JAPAN) 
fitted_pdf_UK=ss.norm.pdf(x3,mu_UK, std_UK) 

plt.figure(1) 
plt.plot(x1, fitted_pdf_USA, 'K', linewidth=2) 

plt.figure(2) 
plt.plot(x2, fitted_pdf_JAPAN,'K', linewidth=2) 
fitted_pdf_JAPAN=ss.norm.pdf(x2,mu_JAPAN, std_JAPAN) 


plt.figure(3) 
plt.plot(x3, fitted_pdf_UK,'K', linewidth=2) 

#plt.show() 
print(standardize_USA) 
print(standardize_JAPAN) 

#print(USA) 
print(UK) 
print(JAPAN) 
+1

Erster und bisher einziger Vorschlag von meiner Seite: Stellen Sie eine [mcve] des Problems zur Verfügung, mit dem Sie Hilfe benötigen. – ImportanceOfBeingErnest

+0

Danke für den Hinweis. Ich bin neu in Python und Stackoverflow, daher bin ich mit Conventions nicht vertraut. Das werde ich beim nächsten Mal beachten. Übrigens irgendwelche Gedanken darüber, was das Problem mit meinen Plots verursacht? – MyWrathAcademia

+0

Es ist schwer zu verstehen, was wir tun sollen, obwohl Sie die Hilfe tatsächlich benötigen und wir sollten sie bereitstellen. [PyMC] (http://docs.pymc.io/notebooks/LKJ.html) enthält einen Beispielcode, der Ihnen den Einstieg erleichtert. Ein bekanntes Framework und ein Schritt-für-Schritt-Notizbuch helfen uns dabei, Ihnen zu helfen. –

Antwort

0

Das Problem, das Sie haben, ist, dass der Grenzwert für die Kurve von nur einer Kurve im

Teil erhalten wird
xmin, xmax = plt.xlim() 

Make Einzel Grenzen für jedes Diagramm aus seinen jeweiligen Daten, nicht das Diagramm Grenze, und es wird Ihr Problem lösen. Verwenden Sie max() und min() von numpy.

x1=np.linspace(USA.min(),USA.max(),100) 

Tun Sie es für jedes Grundstück mit seinen entsprechenden Daten. Auf diese Weise erhalten Sie glatte Kurven, aber das Limit ist nicht die Grafik, sondern die Daten. Wenn es zu klein wird, erhöhen Sie einfach die Grenzen durch eine Multiplikation (wie 1.1*max()) oder eine Summe (max()+10; min hängt von den Daten ab).

+0

Das ist wirklich interessant. Ich hoffe, du hast Recht, denn ich habe ewig versucht, den Fehler zu finden. Also musst du statt der Grenzwerte lieber Werte verwenden? Ich freue mich darauf, Ihren Code zu sehen – MyWrathAcademia

+0

@mywrathacademia Yep, die Verwendung der Max-und Min-Werte von jedem Satz sollte funktionieren. Wie in dem Kommentar erwähnt, ist Ihr Beispiel nicht genug, um das Problem zu reproduzieren, eine Ausgabe wäre gut, um eine bessere Frage zu stellen. – Guto

+0

Und ich arbeitete. Danke Guto, die Art und Weise, wie du das Problem entdeckt hast, war sehr beeindruckend. Ich nutze die Daten nun genau wie Sie vorgeschlagen haben. Allerdings musste ich die Sortierfunktion verwenden, da die Kurve sehr geräuschvoll war. Ich habe eine glattere Kurve für einen der Datensätze erhalten, wenn ich die xmin- und xmax-Grenzwerte im Vergleich zu den tatsächlichen Daten verwendet habe. Irgendeine Idee warum das ist? – MyWrathAcademia