2015-11-04 122 views
0

我試圖繪製使用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

我沒有得到你的答案你可以只編輯你在這裏說的代碼 –

回答

1

pyplot.subplot()需要subplot(nrows, ncols, plot_number),所有三個選項都是整數。

Matplotlib正試圖將您的fd列表轉換爲整數類型並失敗。

+0

那麼如果你想要這些列表的第一個元素,我將如何做到這一點 –

+0

從列表中提供有效的參數,如'f [0]'和'd [0]'。從你的代碼中不清楚你想要這個子圖是什麼樣的,所以我不能提供一個完整的例子。 – economy

1

只是一些小問題。您必須使用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

相關問題