int()函数的参数必须是一个字符串,一类字节对象,数字,而不是“名单”

问题描述:

我试图绘制使用Python中matplotlib.pyplot一个图形,但得到一个错误:int()函数的参数必须是一个字符串,一类字节对象,数字,而不是“名单”

int() argument must be a string, a bytes-like object or a number, not 'list'

在倒数第二行。

下面是代码:

import numpy as np 
import random 
import matplotlib.pyplot as plt 

#constants 
mUn0 = 1350 
Vcat = 18000000 
n = 2 * pow(10,16) 
e = 1.6 * pow(10,-19) 

#variable 
E = 1000 
d = [] 
f = [] 

for i in range(1,E): 
    j = log(n*e*mUn0) + log(i) - 0.5 * log(1+pow((mUn0*i/Vcat),2)) 
    f.append(j) 
    d.append(log(i)) 
plt.xlabel('E') 
plt.ylabel('V') 
plt.subplot(2,1,2) 
plt.subplot(f,d,'bo') 
plt.show() 

谢谢

+0

第二个最后一行 plt.subplot(f, d,'bo') –

+0

就像说的那样,你必须传入一些可以转换为'plt.subplot'的int的东西。因为'f和d'都是列表,它会导致错误。尝试通过'zip(f,d)'迭代并传递每个元素作为参数 –

+0

我没有得到你的答案你可以只编辑你在这里说的代码 –

pyplot.subplot()需要subplot(nrows, ncols, plot_number),所有三个选项都是整数。

Matplotlib正试图将您的fd列表转换为整数类型并失败。

+0

那么如果你想要这些列表的第一个元素,我将如何做到这一点 –

+0

从列表中提供有效的参数,如'f [0]'和'd [0]'。从你的代码中不清楚你想要这个子图是什么样的,所以我不能提供一个完整的例子。 – economy

只是一些小问题。您必须使用plt.plot()进行绘图,并且您不能只使用log,您需要np.log()或导入math模块,然后使用math.log()。我注意到我#FIXED

import numpy as np 
import random 
import matplotlib.pyplot as plt 

#constants 
mUn0 = 1350 
Vcat = 18000000 
n = 2 * pow(10,16) 
e = 1.6 * pow(10,-19) 

#variable 
E = 1000 
d = [] 
f = [] 

for i in range(1,E): 
    j = np.log(n*e*mUn0) + np.log(i) - 0.5 * np.log(1+pow((mUn0*i/Vcat),2)) #FIXED 
    f.append(j) 
    d.append(np.log(i)) #FIXED 
plt.xlabel('E') 
plt.ylabel('V') 
plt.subplot(2,1,2) #not needed, but maybe a holdover from full code 
plt.plot(f,d,'bo') #FIXED 
plt.show() 

这需要语法错误护理改线。使用子图与一个绘图一起工作,但您不需要它,所以我不知道是哪种类型的逻辑错误(是否需要两个绘图?)

+0

非常感谢你的工作 –

+0

@YogeshYadav你打赌。尽管在这种情况下导致了一个错误,但对于使用'导入为'范例的主要赞誉。太多人将所有内容都导入到全局名称空间中。 – BlivetWidget