2016-07-15 3 views
1

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) 

Antwort

1

streamplot benötigt x und z Vektoren zu sein. Versuchen:

x = np.linspace(-90000000,9000000, 30) 
z = np.linspace(-90000000,9000000, 30) 
ax.streamplot(x,z,Bx,Bz) 
0

ändert es zu

streamplot(z,y,Bz,Bx) 

Ich hatte das gleiche Problem Prüfung für ein nichtlineares System, und ich weiß nicht, warum dieser Fehler ausgelöst wird, aber wenn ich umgekehrt die Variablen es funktioniert (weil eine andere Figur mit einem Meshgrid gearbeitet hat).

Verwandte Themen