我正在尝试绘制(B_x,B_z)场线,代码写在下面。我使用的函数是“streamplot(x,z,Bx,Bz)”。运行后,'x'、'z'、'Bx'、'Bz'的类型为float64,大小为(30L,30L),相等。
但是,运行后会显示范围 (0,1) 的橙色 Canvas 图和“ValueError: The rows of 'x' must equal”。代码有什么问题?
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(z,y,Bz,Bx)
我在非线性系统中遇到了同样的问题,我不知道为什么会抛出这个错误,但是当我反转变量时它起作用了(这是因为另一个图形使用了网格网格)。
关于python - 询问matplotlib streamplot "The rows of ' x' 必须等于错误”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38389001/