2017-12-18 7 views
0

ich für eine Reihe erschaffe Plots von Konturen Figur. Ich speichere die Konturobjekte in einer Liste und erstelle später ein neues Plot. Wie kann ich die gespeicherten Plots in der neuen Plot erneut verwenden?bestehendes Grundstück hinzufügen in matplotlib pylab

import numpy as np 
import matplotlib.pylab as plt 

# Used for calculating z: 
A = [0.9, 1.0] 
# Contour values we will use: 
values = [0.7, 0.8] 
# Create points for data: 
x = np.linspace(0.0, np.pi, 1000) 
y = np.linspace(0.0, np.pi, 1000) 
# Grid the data: 
xi, yi = np.meshgrid(x, y) 

# Lists for storing contours: 
CS0 = [] 
CS1 = [] 

for a in A: 
    # Calculate z for this value of A: 
    z = a * (np.cos(xi)**2 + np.sin(yi)**2) 
    print np.max(z) 
    print np.min(z) 
    # Plot for this iteration: 
    plt.figure() 
    plt.contourf(xi, yi, z, 101) 

    # Create contours for different values: 
    solid = plt.contour(xi, yi, z, levels=[values[0]]) 
    dashed = plt.contour(xi, yi, z, levels=[values[1]], linestyles='dashed') 
    plt.show() 

    # Store chosen contours or a comparative plot later: 
    CS0.append(solid) 
    CS1.append(dashed) 

Diese beiden Zahlen werden für die verschiedenen Werte von A erzeugt: The first contourf plot created in the loop

The second contourf plot created in the loop

weiterhin Nun, indem versucht wird, die gespeicherten QuadContourSet Objekte wiederverwenden:

colours = ['red', 'orange'] 

plt.close() 
plt.figure() 
for c0, c1, color, a in zip(CS0, CS1, colours, A): 
    print type(c0), type(c1) 
    # Re-use c0 and c1 in this new plot...???.... 
    plt.? = c0 # ??? 
    plt.? = c1 # ??? 

plt.show() 

Der normale Weg, um einen neuen Plot zu erstellen, funktioniert nicht, weil ich den on einfach wiederverwenden möchte Ich habe es früher gespeichert.

Antwort

1

Die Lösung ist recht einfach; passieren die gespeicherten QuadContourSet Objekte wieder plt.contour:

plt.contour(c0, colors=color) 
plt.contour(c1, colors=color, linestyles='dashed') 

So ist die volle jetzt Arbeits Code wie folgt aussieht:

import numpy as np 
import matplotlib.pylab as plt 

# Used for calculating z: 
A = [0.9, 1.0] 
# Contour values we will use: 
values = [0.7, 0.8] 
# Create points for data: 
x = np.linspace(0.0, np.pi, 1000) 
y = np.linspace(0.0, np.pi, 1000) 
# Grid the data: 
xi, yi = np.meshgrid(x, y) 

# Lists for storing contours: 
CS0 = [] 
CS1 = [] 

for a in A: 
    # Calculate z for this value of A: 
    z = a * (np.cos(xi)**2 + np.sin(yi)**2) 
    print np.max(z) 
    print np.min(z) 
    # Plot for this iteration: 
    plt.figure() 
    plt.contourf(xi, yi, z, 101) 

    # Create contours for different values: 
    solid = plt.contour(xi, yi, z, levels=[values[0]]) 
    dashed = plt.contour(xi, yi, z, levels=[values[1]], linestyles='dashed') 
    plt.show() 

    # Store chosen contours or a comparative plot later: 
    CS0.append(solid) 
    CS1.append(dashed) 

colours = ['red', 'orange'] 

plt.close() 
plt.figure() 
for c0, c1, color, a in zip(CS0, CS1, colours, A): 
    print type(c0), type(c1) 
    # Re-use c0 and c1 in this new plot 
    plt.contour(c0, colors=color) 
    plt.contour(c1, colors=color, linestyles='dashed') 

    # I found that I had to set the axis limits manually: 
    plt.xlim(np.min(x), np.max(x)) 
    plt.ylim(np.min(y), np.max(y)) 

plt.show() 

enter image description here

Verwandte Themen