Ich versuche, (B_x, B_z) Feldlinie zu plotten und der Code ist unten geschrieben. Die Funktion, die ich benutzte, ist 'streamplot (x, z, Bx, Bz)'. Nach dem Lauf haben 'x', 'z', 'Bx' und 'Bz' einen Typ als float64 und die Größe war (30L, 30L) gleich.Fragen Sie nach einem Fehler in Matplotlib streamplot "Die Zeilen von 'x' müssen gleich sein"
Das orange Leinwanddiagramm des Bereichs (0,1) und "ValueError: Die Zeilen von 'x' müssen gleich sein" werden nach dem Ausführen angezeigt. Was ist das Problem im Code?
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)