Python 询问matplotlib streamplot“中的错误;第'行;x';必须相等”;
我试图绘制(B_x,B_z)场线,代码写在下面。我使用的函数是“streamplot(x,z,Bx,Bz)”。运行后,“x”、“z”、“Bx”和“Bz”的类型为float64,大小为(30L,30L),相等 但是,运行后会显示范围(0,1)和“ValueError:x”的行必须相等”的橙色画布图。代码中有什么问题Python 询问matplotlib streamplot“中的错误;第'行;x';必须相等”;,python,matplotlib,Python,Matplotlib,我试图绘制(B_x,B_z)场线,代码写在下面。我使用的函数是“streamplot(x,z,Bx,Bz)”。运行后,“x”、“z”、“Bx”和“Bz”的类型为float64,大小为(30L,30L),相等 但是,运行后会显示范围(0,1)和“ValueError:x”的行必须相等”的橙色画布图。代码中有什么问题 import numpy as np import math as m from matplotlib.pyplot import cm # color map import matp
import numpy as np
import math as m
from matplotlib.pyplot import cm # color map
import matplotlib.pyplot as plt
r_E=6.4*10**6 # (m)
B0=0.0001
Earth = plt.Circle((0, 0), 6400000,color='orange')
plot=plt.figure()
x,z=np.mgrid[-9000000:9000000:30j, -9000000:9000000:30j]
r=np.sqrt(np.add(np.square(x),np.square(z)))
ax=plot.gca()
ax.add_patch(Earth)
B_x=[]
B_z=[]
for i in range(len(x)):
bx=[]
bz=[]
for j in range(len(x)):
bx.append(B0*(r_E/r[i,j])**3*(x[i,j]*z[i,j]/r[i,j]**2)*(1-( 3+x[i,j]/(x[i,j]**2)**(1.0/2) )/8))
bz.append(B0*(r_E/r[i,j])**3/r[i,j]**2*(z[i,j]**2-(x[i,j]**2)*(3+x[i,j]/(x[i,j]**2)**(1.0/2))/8))
B_x.append(bx)
B_z.append(bz)
Bx=np.asarray(B_x)
Bz=np.asarray(B_z)
ax.streamplot(x,z,Bx,Bz)
plt.show(plot)
streamplot
需要x
和z
作为向量。尝试:
x = np.linspace(-90000000,9000000, 30)
z = np.linspace(-90000000,9000000, 30)
ax.streamplot(x,z,Bx,Bz)
换成
streamplot(z,y,Bz,Bx)
我对一个非线性系统做了同样的测试,我不知道为什么会抛出这个错误,但是当我反转变量时,它起了作用(这是因为另一个图形使用了网格)