2017-06-27 33 views
0

即时图试图绘制2个图形的总和。我很容易通过结合y值来实现这一点,当它是一个数组或一条直线时,但现在我只使用同一个图只稍微偏移,y值由函数确定,所以我不知道该怎么做。这是我到目前为止,也有一些我的尝试是#'d。你可以处理这个使用python绘制2个异相普朗克函数的组合图形

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

你想添加两个绘制的功能? –

+0

是的。我不知道如何去做。 –

回答

1

的一种方法是通过用0填充在开始(使用np.concatenate((np.zeros(shift),intensity)))的移位的数据中,并在结束时(切片[:-shift])之前的两个数据集求和去除数据的相同的量。

你的代码的清理版本如下

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() 

有可能是一个更简单的方法,但是这是一个相当简单的方法。

+0

非常感谢。当任何功能正确时,这应该工作吗?如果我不得不垂直移动它,该怎么办?另外[:-shift]是做什么的? –

+0

适用于任何功能。我可以看看我是否花时间在函数中隔离这个过程。如果你想垂直移动,只需在强度数组中添加一个常数。 [:-shift]是从开始直到结束前的换档单元开始的数组的一部分。 –

+0

好吧,这是有道理的。如果我想找到每条曲线下面的区域,那又如何呢?我尝试使用四功能,但它不断给我一个错误,说它不可调用。对不起,我对这一切还是陌生的,我确定它看起来像一个简单的问题。 –