2017-05-12 4 views
1

Ich versuche, Startpunkte zu einem Stromlinienplot hinzuzufügen. Ich fand einen Beispielcode mit Startpunkten here; Bei diesem Link wird ein anderes Problem diskutiert, aber das Argument start_points funktioniert. Von here griff ich den Streamline-Beispielcode (images_contours_and_fields Beispielcode: streamplot_demo_features.py). Ich verstehe nicht, warum ich Startpunkte in einem Code definieren kann und nicht den anderen. Ich erhalte die folgende Fehlermeldung, wenn ich versuche, Startpunkte im Beispielcode (streamplot_demo_features.py) zu definieren:Python Matplotlib Streamplot mit Startpunkten

Traceback (most recent call last): 

    File "<ipython-input-79-981cad64cff6>", line 1, in <module> 
    runfile('C:/Users/Admin/.spyder/StreamlineExample.py', wdir='C:/Users/Admin/.spyder') 

    File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile 
    execfile(filename, namespace) 

    File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile 
    exec(compile(scripttext, filename, 'exec'), glob, loc) 

    File "C:/Users/Admin/.spyder/StreamlineExample.py", line 28, in <module> 
    ax1.streamplot(X, Y, U, V,start_points=start_points) 

    File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\__init__.py", line 1891, in inner 
    return func(ax, *args, **kwargs) 

    File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\axes\_axes.py", line 4620, in streamplot 
    zorder=zorder) 

    File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\streamplot.py", line 144, in streamplot 
    sp2[:, 0] += np.abs(x[0]) 

ValueError: non-broadcastable output operand with shape (1,) doesn't match the broadcast shape (100,) 

Ich habe Ankündigung gibt es nicht viel auf dem Netz in Art und Weise ist start_points zu verwenden, so dass jeder zusätzliche Informationen wären hilfreich.

+0

Stack-Überlauf ist dumm und würde mich auf den folgenden Link zu meinem Beitrag nicht zulassen hinzufügen: http://matplotlib.org/devdocs/api/_as_gen /matplotlib.axes.Axes.streamplot.html. Von hier aus kann ich die benötigten Eingänge für Startpunkte sehen, aber es gibt nicht viel mehr Informationen. – JWil

Antwort

2

Der Hauptunterschied zwischen den example that successfully uses start_points und den example from the matplotlib page ist, dass die erste 1D-Arrays als x und y Gitter verwendet, während das offizielle Beispiel 2D-Arrays verwendet.

Da the documentation erklärt hiermit ausdrücklich

x, y: 1D-Arrays, eine gleichmäßig beabstandeten Raster.

Wir könnten bei 1D-Arrays bleiben. Es ist unklar, warum das Beispiel dem Docsting widerspricht, aber wir können das einfach ignorieren.

Nun, 1D Arrays als Gitter verwenden, funktioniert start_points wie erwartet, dass es ein 2-Spalten-Array (erste Spalte X-Koordinaten, zweite Y-Koordinaten) dauert.

Ein komplettes Beispiel:

import numpy as np 
import matplotlib.pyplot as plt 

x,y = np.linspace(-3,3,100),np.linspace(-3,3,100) 
X,Y = np.meshgrid(x,y) 
U = -1 - X**2 + Y 
V = 1 + X - Y**2 
speed = np.sqrt(U*U + V*V) 

start = [[0,0], [1,2]] 

fig0, ax0 = plt.subplots() 

strm = ax0.streamplot(x,y, U, V, color=(.75,.90,.93)) 
strmS = ax0.streamplot(x,y, U, V, start_points=start, color="crimson", linewidth=2) 

plt.show() 

enter image description here

+0

Super, danke. Das macht viel mehr Sinn, wenn man weiß, dass der Fehler innerhalb der streamplot-Funktion von der Tatsache herrührt, dass er das Array start_points nicht mit den Arrays x [0] und y [0] übertragen konnte, weil diese Arrays nur sein sollten 1D. – JWil