2014-07-26 15 views
6

Ich habe das gleiche Problem präsentiert here, aber die vorgeschlagene Lösung hat nicht für mich arbeiten.Axis Grenzen für Streudiagramm - Matplotlib

ich eine Reihe von Daten, die das Plotten Hauptstück dieses Muster haben:

enter image description here

die eine graphische Auftragung, die Achsgrenzen variiert von (-1, 1) in x und y, mit einem Rand mit diesem Stück Code eingestellt:

plt.figure() 
plt.show(data) 
## Add some margin 
l, r, b, t = plt.axis() 
dx, dy = r-l, t-b 
plt.axis([l-0.1*dx, r+0.1*dx, b-0.1*dy, t+0.1*dy]) 

Das Problem ist, weil ich mehr ‚Komplex‘ Plot haben, in dem einige Änderungen musste mich gemacht. Dies ist der Code, der es produziert:

def plot_quiver_singularities(min_points, max_points, vector_field_x, vector_field_y, file_path): 
    """ 
    Plot the singularities of vector field 
    :param file_path : the path to save the data 
    :param vector_field_x : the vector field x component to be plot 
    :param vector_field_y : the vector field y component to be plot 
    :param min_points : a set (x, y) of min points field 
    :param max_points : a set (x, y) of max points field 
    """ 
    fig = plt.figure(figsize=(8, 8)) 
    ax = fig.add_axes([.13, .3, .6, .6]) 

    ## Plot quiver 
    x, y = numpy.mgrid[-1:1:100*1j, -1:1:100*1j] 
    m = numpy.sqrt(numpy.power(vector_field_x, 2) + numpy.power(vector_field_y, 2)) 
    quiver = ax.quiver(x, y, vector_field_x, vector_field_y, m, zorder=1) 

    ## Plot critical points 
    x = numpy.linspace(-1, 1, x_steps) 
    y = numpy.linspace(-1, 1, y_steps) 

    # Draw the min points 
    x_indices = numpy.nonzero(min_points)[0] 
    y_indices = numpy.nonzero(min_points)[1] 
    ax.scatter(x[x_indices], y[y_indices], marker='$\\circlearrowright$', s=100, zorder=2) 

    # Draw the max points 
    x_indices = numpy.nonzero(max_points)[0] 
    y_indices = numpy.nonzero(max_points)[1] 
    ax.scatter(x[x_indices], y[y_indices], marker='$\\circlearrowleft$', s=100, zorder=2) 

    ## Put legends 
    marker_min = plt.Line2D((0, 0), (0, 0), markeredgecolor=(1.0, 0.4, 0.0), linestyle='', 
          marker='$\\circlearrowright$', markeredgewidth=1, markersize=10) 
    marker_max = plt.Line2D((0, 0), (0, 0), markeredgecolor=(0.2, 0.2, 1.0), linestyle='', 
          marker='$\\circlearrowleft$', markeredgewidth=1, markersize=10) 
    plt.legend([marker_min, marker_max], ['CW rot. center', 'CCW rot. center'], numpoints=1, 
       loc='center left', bbox_to_anchor=(1, 0.5)) 

    quiver_cax = fig.add_axes([.13, .2, .6, .03]) 
    fig.colorbar(quiver, orientation='horizontal', cax=quiver_cax) 

    ## Set axis limits 
    plt.xlim(-1, 1) 
    plt.ylim(-1, 1) 

    ## Add some margin 
    # l, r, b, t = plt.axis() 
    # dx, dy = r-l, t-b 
    # plt.axis([l-0.1*dx, r+0.1*dx, b-0.1*dy, t+0.1*dy]) 

    plt.savefig(file_path + '.png', dpi=dpi) 
    plt.close() 

Dies ergibt folgendes Bild:

enter image description here

Wie zu sehen ist, werden die Achsengrenzen nicht halten und ich nicht, warum noch nicht gefunden.

Jede Hilfe wäre willkommen.

Vielen Dank im Voraus.

+0

Ein wenig unsicher hier spielt die Reihenfolge eine Rolle? Sie haben den Farbbalken nach dem letzten Achsenbefehl eingefügt. Möchten Sie versuchen, es zu entfernen? – Dan

+0

Ja, das habe ich versucht. Das Ergebnis ist das gleiche. Das Problem tritt auf, wenn ich die Streufunktion aufrufen. – pceccon

+0

Deaktivieren Sie die automatische Skalierung, oder legen Sie die Grenzwerte nach dem Aufrufen der Streuung einfach auf den gewünschten Wert fest. – tacaswell

Antwort

14

Ich war in der Lage, das Problem setzt dieses Stück Code

plt.xlim(-1, 1) 
plt.ylim(-1, 1) 

Recht scatter() nach dem Aufruf zu lösen.

Verwandte Themen