2017-06-27 7 views
0

en essayant de tracer la somme de 2 graphes. Je l'ai fait facilement en combinant les valeurs de y quand il s'agissait d'un tableau de nombres ou d'une ligne droite, mais maintenant im en utilisant le même graphique seulement légèrement décalé et les valeurs y sont déterminées par une fonction donc je ne sais pas quoi. Voici ce que j'ai jusqu'ici et aussi certaines de mes tentatives sont # 'd.Représentation graphique des combinaisons de deux fonctions de Planck déphasées en utilisant python

import matplotlib.pyplot as plt 
import numpy as np 

h=6.626e-34 
c= 3.0e+8 
k= 1.38e-23 
#wav is the wavelength 

def planck(wav, T): 
    a= 2.0*h*c**2 
    b= (h*c)/(wav*k*T) 
    intensity = a/((wav**5) * (np.exp(b)- 1.0)) 
    return intensity 

wavelengths= np.arange(1e-9, 3e-6, 1e-9) 
#wave=np.arange((1+500)*10**-9,3e-6,1e-9) 
intensity6000= planck(wavelengths, 6000.) 
#intensity6001=planck(wavelengths+(500*10**-9),6000) 
#sum_of_values=intensity6000+ 

plt.plot(wavelengths*1e9, intensity6000, 'm-', label= '6000 K') 
plt.plot(wavelengths*1e9+500, intensity6000, 'b', label='6000k shifted') 
#plt.plot(wavelengths*1e9+wavelengths*1e9+500, intensity6000) this is wrong 
it shifts it again doesnt show the total 
#plt.plot(wavelengths*1e9+500,intensity6001) #plots a straight line at 0 



plt.xlabel('Wavelength\n(nm)') 
plt.ylabel('Intensity\n(W Sr^-1 m^-3)') 
plt.title('Black Body Radiation') 
plt.legend() 
plt.show() 
+0

Vous voulez additionner les deux fonctions tracées? –

+0

Oui. Je ne sais pas comment s'y prendre. –

Répondre

1

Une façon vous pouvez aborder c'est par un rembourrage avec 0 au début (en utilisant np.concatenate((np.zeros(shift),intensity))) des données décalées et en supprimant la même quantité de données à la fin (le découpage [:-shift]) avant sommation des deux ensembles de données.

Une version nettoyée de votre code est le suivant

import matplotlib.pyplot as plt 
import numpy as np 

h=6.626e-34 
c= 3.0e+8 
k= 1.38e-23 
shift = 500 # defining the shift 

#wav is the wavelength 
def planck(wav, T): 
    a= 2.0*h*c**2 
    b= (h*c)/(wav*k*T) 
    intensity = a/((wav**5) * (np.exp(b)- 1.0)) 
    return intensity 

wavelengths= np.arange(1e-9, 3e-6, 1e-9) 

intensity = planck(wavelengths, 6000.) 
# creating a shifted intensity by padding 0 in the begining 
# and removing extra values at the end 
shifted_intensity = np.concatenate((np.zeros(shift),intensity))[:-shift] 

sum_intensity = intensity + shifted_intensity 


plt.plot(wavelengths*1e9, intensity, 'm-', label= '6000 K') 
plt.plot(wavelengths*1e9, shifted_intensity, 'b-', label='6000 K shifted') 
plt.plot(wavelengths*1e9, sum_intensity, 'r-', label= 'Summed intensity') 

plt.xlabel('Wavelength\n(nm)') 
plt.ylabel('Intensity\n(W Sr^-1 m^-3)') 
plt.title('Black Body Radiation') 
plt.legend() 
plt.show() 

Il pourrait y avoir un moyen plus simple, mais cela est une façon assez simple.

+0

Merci beaucoup. Cela devrait fonctionner lorsque vous déplacez une fonction correcte? Et si je devais le déplacer verticalement? Aussi, que fait le [: -shift]? –

+0

Fonctionne pour n'importe quelle fonction. Je pourrais voir si je prends le temps d'isoler la procédure dans une fonction. Si vous voulez déplacer verticalement, vous ajoutez simplement un nombre constant au tableau d'intensité. Le [: -shift] est une tranche d'un tableau qui commence au début jusqu'à des unités de décalage avant la fin. –

+0

D'accord, cela a du sens. Qu'en est-il si je voulais trouver la zone sous chaque courbe. J'ai essayé d'utiliser la fonction quadruple mais elle continue à me donner une erreur en disant qu'elle n'est pas appelable. Désolé je suis toujours nouveau à tout cela, je suis sûr que cela semble être une question simple. –