这个问题在这里已有答案:
我相信这个问题之前已被多次询问过,但是我找不到正确的答案。我正在尝试绘制非常简单的代码,但是当它执行时,最终结果只是一个空图。代码如下:
import math
import matplotlib.pyplot as mpl
import numpy as np
Q = 13.6
m_e = 9.11e-31
k = 8.6e-5
c = 3e8
eta = 4e-10
for T in np.arange(3000,4500):
S = 3.84*eta*((k*T)/(m_e*c**2))**(3/2)*(Q/(k*T))
X = (-1 + np.sqrt(1+(4*S)))/(2*S)
%matplotlib inline
mpl.plot(S, T)
mpl.show()
我意识到这是代码的方式它可能是一个非常简单的答案,但我找不到问题。在此先感谢您的帮助!
您没有对在for循环中创建的值执行任何操作。因此,当你来绘图时,你只有1个S
和X
以及T
的值,因此,你的图表将是空的。
解决此问题的一种方法是将值附加到列表中,然后可以将其传递给plot
调用:
Q = 13.6
m_e = 9.11e-31
k = 8.6e-5
c = 3e8
eta = 4e-10
S_list = []
X_list = []
for T in np.arange(3000,4500):
S = 3.84*eta*((k*T)/(m_e*c**2))**(3/2)*(Q/(k*T))
X = (-1 + np.sqrt(1+(4*S)))/(2*S)
S_list.append(S)
X_list.append(X)
我不确定你是否真的想要对S
绘制T
的值,但如果你这样做,那么你会做类似的事情:
mpl.plot(S_list, np.arange(3000,4500))
mpl.show()
这给出了类似的东西:
编辑:
你实际上不需要在这里做任何循环,numpy
可以处理完整的计算:
T = np.arange(3000,4500)
S = 3.84*eta*((k*T)/(m_e*c**2))**(3/2)*(Q/(k*T))
X = (-1 + np.sqrt(1+(4*S)))/(2*S)
mpl.plot(S, T)
mpl.show()
会给你相同的数字
S,X和T都是标量。我假设你想绘制一个矢量对矢量。
我想你是想这样做的:
import math
import matplotlib.pyplot as mpl
import numpy as np
Q = 13.6
m_e = 9.11e-31
k = 8.6e-5
c = 3e8
eta = 4e-10
S=[]
X=[]
for T in np.arange(3000,4500):
tmp=3.84*eta*((k*T)/(m_e*c**2))**(3/2)*(Q/(k*T))
S.append(tmp)
X.append((-1 + np.sqrt(1+(4*tmp)))/(2*tmp))
%matplotlib inline
mpl.plot(S, X)
mpl.show()
import math
import matplotlib.pyplot as mpl
import numpy as np
Q = 13.6
m_e = 9.11e-31
k = 8.6e-5
c = 3e8
eta = 4e-10
x=[]
t=[]
for T in np.arange(3000,4500):
S = 3.84*eta*((k*T)/(m_e*c**2))**(3/2)*(Q/(k*T))
X = (-1 + np.sqrt(1+(4*S)))/(2*S)
x.append(X)
t.append(T)
mpl.plot(x,t)
mpl.show()