Python绘制肖特基二极管J-V曲线时x/y维度不匹配问题求解
解决肖特基二极管J-V曲线绘图的维度不匹配问题
问题根源
触发ValueError的核心原因是函数返回值格式错误:
定义J(V)时,return J,末尾的逗号会将返回值包装成单元素元组,而非预期的numpy数组。当传入形状为(400,)的Vvals时,返回的是(array(shape(400,)),),实际维度为(1,400),和x轴数据维度不匹配,导致绘图失败。
修复步骤
- 修正函数返回值
将J(V)函数中的return J,改为return J,直接返回numpy数组而非元组。 - 修复两处语法笔误
- 第二张图初始化语句:
ig, ax2 = plt.subplots()→fig, ax2 = plt.subplots() - 第二张图轴属性设置:
x2.set(...)→ax2.set(...)
- 第二张图初始化语句:
- 清理冗余逗号
变量定义行末尾的,\n属于无效语法,可直接删除,避免不必要的警告。
修复后的完整代码
%matplotlib inline import matplotlib.pyplot as plt import numpy as np import math Eg=1.1 # eV Bandgap of Silicon er=11.9 # relative permitivity of Si eo=8.854E-12 # F/m Nc=2.8e19 # cm-3 Nv=1.16e19 # cm-2 k=8.617e-5 # eV/K kJ=1.38e-23 # J/K e=1.602e-19 phiM=4.2 # eV chiSi=4.01 # eV Na=5e16 # cm-3 PhiBP=Eg-(phiM-chiSi) PhiBN=phiM-chiSi print ('barrier height = ', PhiBP, 'eV') Nav=Na/Nv L=np.log(Nav) Evf=-L*k*300 Ecf=Eg-Evf Vo=(PhiBN+Ecf) print ('Vo=', Vo, 'V') ee=er*eo eNa=e*Na*1000000 eev=2*ee*Vo w2=eev/eNa print(w2) W=math.sqrt(w2) W2=W*1000000000 print ('W= ', W, 'm') print ('W=', W2, 'nm') Jo=30*(300**2)*np.exp(-0.8/(k*300)) # Units here are A cm-2 print ('Jo=', Jo, 'A/cm^2') Vvals=np.arange(-2, 2, 0.01) def J(V): # This defines your function (equation) for calculating J vs V # *** WRITE YOUR FORMULA FOR J IN TERMS OF V HERE J=Jo*(np.exp(e*V/(k*300))-1) return J fig, ax1 = plt.subplots() ax1.semilogy(Vvals, J(Vvals), 'ro') ax1.set(xlabel='Voltage (V)', ylabel='Current Density', title='Schottky diode J-V Semilog') fig, ax2 = plt.subplots() # Initializes second plot ax2.plot(Vvals, J(Vvals), 'ro') # Creates linear plot ax2.set(xlabel='Voltage (V)', ylabel='Current Density J', title='Schottky diode J-V Linear') plt.show()
内容的提问来源于stack exchange,提问作者Alex Kratzer
相关产品推荐
相关产品推荐

