Python3 [Jupyter]代码没有在图上显示数据[重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我相信这个问题之前已被多次询问过,但是我找不到正确的答案。我正在尝试绘制非常简单的代码,但是当它执行时,最终结果只是一个空图。代码如下:

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

我意识到这是代码的方式它可能是一个非常简单的答案,但我找不到问题。在此先感谢您的帮助!

python matplotlib physics
3个回答
1
投票

您没有对在for循环中创建的值执行任何操作。因此,当你来绘图时,你只有1个SX以及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()

这给出了类似的东西:

enter image description here

编辑:

你实际上不需要在这里做任何循环,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()

会给你相同的数字


0
投票

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

0
投票
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()
© www.soinside.com 2019 - 2024. All rights reserved.