savefig anders als plt.show() ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Grizzly
User
Beiträge: 34
Registriert: Sonntag 10. Februar 2013, 21:18

Hallo Community,

ich hab mal wieder ein Problem und finde die Lösung einfach nicht...

Ich erzeuge mit savefig png-files die anders sind als mit plt.show() ?! Zum Beispiel rechne ich eine Trajektoie im 3d-Raum, deren zuletzt berechnete Position mit einem Punkt in der xy-Ebene über eine Linie verbunden ist... das soll so nicht sein...

kann ich savefig an show anpassen, dass beide exakt gleich aussehen ?

Danke euch ! :wink:
BlackJack

@Grizzly: Eigentlich sollten die mehr oder weniger gleich sein. Es werden halt verschiedene Backends verwendet um die selben Daten darzustellen. Jetzt ist die Frage welche Darstellung hier das Problem hat. Du könntest ja mal andere Formate wählen, bei denen andere Backends verwendet werden. Also zum Beispiel PostScript, PDF, und SVG. Und da schauen ob die Linie auch gezeichnet wird.

Ansonsten wäre ein kleines, selbstständig laufendes Beispiel praktisch, damit man das selbst mal nachvollziehen kann.
Benutzeravatar
Grizzly
User
Beiträge: 34
Registriert: Sonntag 10. Februar 2013, 21:18

Komischerweise taucht der strich jetzt auch bei plt.show() auf ?
Vielleicht liegt das Problem doch innerhalb meines Codes...

Hier mein Lieblingsbeispiel:

Code: Alles auswählen

import numpy as np                          
import matplotlib.pyplot as plt             
from mpl_toolkits.mplot3d import Axes3D     

delta = 10.
r = 28.
b = 8./3.

dt = 1e-3
Nt = 4e4

x = np.zeros(Nt+1)
y = np.zeros(Nt+1)
z = np.zeros(Nt+1)

x[0] = 1.
y[0] = 1.
z[0] = 1.

for i in range(int(Nt)):
    
    x[i+1] = (delta * (y[i]-x[i])) * dt + x[i]
    y[i+1] = (-x[i]*z[i] + r*x[i] - y[i]) * dt + y[i]
    z[i+1] = (x[i] * y[i] - b * z[i]) * dt + z[i]
    
    
    
    if i in range(0,int(Nt)+10000,10000):
        fig = plt.figure(facecolor='white', figsize=(12,5))

        ax = fig.add_subplot(1,2,2)
        plt.ticklabel_format(style='sci', axis='x', scilimits=(0,4))
        h1, = ax.plot(x,'b', lw='1.')
        h2, = ax.plot(y,'r', lw='1.')
        h3, = ax.plot(z,'g', lw='1.')
        plt.xlim(0, Nt)
        plt.ylim(-30, 50)

        plt.legend([h1, h2, h3], ['x', 'y', 'z'])
        plt.xlabel('number of timesteps')
        plt.ylabel('values')
        ax.grid()

        ax = fig.add_subplot(1,2,1,projection='3d')
        ax.plot(x,y,z,'b')
        ax.set_xlim(-20, 20)
        ax.set_ylim(-25, 25)
        ax.set_zlim(0, 50)
        ax.set_xlabel("X Axis")
        ax.set_ylabel("Y Axis")
        ax.set_zlabel("Z Axis")        
        
        
        plt.show()
        #fig.savefig('/XX/YY/lorenz_%05d.png' % i)
Auch sind im rechten subplot die unberechneten Werte um Null, wo eigentlich keine seien sollten ?

Ich bitte um eure Hilfe :D
Zuletzt geändert von Anonymous am Freitag 31. Mai 2013, 12:43, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Benutzeravatar
Grizzly
User
Beiträge: 34
Registriert: Sonntag 10. Februar 2013, 21:18

Ach ich Idiot... hab den Fehler gefunden.

Einfach in den plot Befehlen nach den Variablen die Indizes einfügen: x[:i],y[:i],z[:i] und schon passts !

Wie immer, erst posten und danach das Denken anfangen...

Trotzdem Danke ! :roll:
Antworten