2016-04-10 4 views
1

Ich habe ein Verteilungshistogramm, weil ich diese Verteilung verwenden werde, um einige Schnitte zu machen. Ich möchte die Region für meine Schnitte beschatten. Ich weiß, wie man alles beschattet, aber ich weiß nicht, wie man einen Teil des Histogramms beschattet. Unten ist mein Code:schattieren teilweise das Histogramm in Python

f, (ax1, ax2) = plt.subplots(1,2, sharex=False, sharey=True,figsize=(20,8)) 
ax1.xaxis.set_minor_locator(minor_locator3) 
ax1.yaxis.set_minor_locator(minor_locator4) 
ax1.tick_params('both', length=10, width=2, which='major') 
ax1.tick_params('both', length=5, width=2, which='minor') 
ax1.set_xlabel(r'$\log\mathcal{L} ~[\odot]$',fontsize=30) 
ax1.set_ylabel(r'Number of galaxies',fontsize=30) 
ax1.set_yscale('log') 
ax1.set_xlim(6,13.5) 
bins = np.linspace(6,13,141) 
ax1.hist(L,bins,histtype='step') 

ax2.xaxis.set_minor_locator(minor_locator5) 
ax2.yaxis.set_minor_locator(minor_locator6) 
ax2.tick_params('both', length=10, width=2, which='major') 
ax2.tick_params('both', length=5, width=2, which='minor') 
ax2.set_xlabel(r'$r_e ~{\rm [Kpc]}$',fontsize=30) 
ax2.set_yscale('log') 
bins = np.linspace(0,25,251) 
ax2.hist(R50,bins,histtype='step') 
plt.subplots_adjust(wspace=0.005, left=0.15, right=0.9, top=0.95, bottom=0.05) 
plt.savefig('R50_hist.eps',bbox_inches='tight') 

Und die Handlung ist unter:

ich Schatten will den linken Bereich von x = 10 bis x = 11 (rechts von x = 2 bis x = 10) und Unter dem Histogramm kann mir jeder eine Idee geben, wie ich es angehen soll?

enter image description here

+0

"unterhalb des Histogramms über y = 0"; Ich bin mir nicht sicher, was du damit meinst, da alles über 0 liegt. Ich nehme an, es ist einfach extra, da die Schattierung zwischen x = 10 und x = 11 alle y-Werte impliziert (was auch durch die Tatsache impliziert wird) ein Histogramm: Es gibt wenig Nutzen bei der Schattierung von etwas darüber, sagen wir, y> 100). – Evert

+0

Ja, Sie haben Recht. Ich werde es nur überarbeiten. –

Antwort

1

Es ist ziemlich einfach: Sie gerade overplot Bar Histogramm, mit der entsprechenden Farbe, und sorgen für die Linienbreite (lw) gleich Null ist.

Zum Beispiel (ich habe das Dataset nicht, natürlich):

import numpy as np 
from matplotlib import pyplot as plt 

N = 1e5 
lum = 10**10.5 * np.random.normal(loc=1, scale=1, size=1e5) 
lum = np.log10(lum) 
dist = np.random.normal(loc=5, scale=5, size=1e5) 

f, (ax1, ax2) = plt.subplots(1,2, sharex=False, sharey=True,figsize=(20,8)) 
# Not bothered with the locators 
#ax1.xaxis.set_minor_locator(minor_locator3) 
#ax1.yaxis.set_minor_locator(minor_locator4) 
ax1.tick_params('both', length=10, width=2, which='major') 
ax1.tick_params('both', length=5, width=2, which='minor') 
ax1.set_xlabel(r'$\log\mathcal{L} ~[\odot]$',fontsize=30) 
ax1.set_ylabel(r'Number of galaxies',fontsize=30) 
ax1.set_yscale('log') 
ax1.set_xlim(6,13.5) 
bins = np.linspace(6,13,141) 
ax1.hist(lum,bins,histtype='step') 
# Subselect the luminosities 
mask = (lum >= 10) & (lum <= 11) 
# Overplot colored bar histogram 
ax1.hist(lum[mask],bins,histtype='bar', color='red', lw=0) 

#ax2.xaxis.set_minor_locator(minor_locator5) 
#ax2.yaxis.set_minor_locator(minor_locator6) 
ax2.tick_params('both', length=10, width=2, which='major') 
ax2.tick_params('both', length=5, width=2, which='minor') 
ax2.set_xlabel(r'$r_e ~{\rm [Kpc]}$',fontsize=30) 
ax2.set_yscale('log') 
bins = np.linspace(0,25,251) 
ax2.hist(dist,bins,histtype='step') 

plt.subplots_adjust(wspace=0.005, left=0.15, right=0.9, top=0.95, bottom=0.05) 
plt.savefig('R50_hist.png',bbox_inches='tight') 

enter image description here

es als eine Übung für den Leser übrig geblieben ist etwas ähnliches für den rechten Teil der Figur zu tun.

+0

Vielen Dank. Es funktioniert sehr gut ~ –