Seite 1 von 1

Mehrere Plots in einer Figure

Verfasst: Sonntag 10. Mai 2015, 19:46
von somo
Hallo liebe Forumsgemeinde,

als blutiger Anfänger habe ich versucht folgendes kurzes Matlabscript,

Code: Alles auswählen

x=(0:0.1:5);
w = 2;
s = 20;
zet = linspace(0.2,10,6);

figure(1)
for s=zet
n = 2-erf(x/(2*(w*s)^(1/2)));
plot(x,n)
hold on
xlabel('x');
ylabel('y')
end
in Pythoncode umzuwandeln.

Code: Alles auswählen

# -*- coding: utf-8 -*-

import numpy as np
import pylab as pl
from math import erf

x = np.arange(0,5,0.1)
zet = np.linspace(0.2,10,6)
w = 2
s = 20

for s in zet:
    np_erf = np.vectorize(erf)
    e = 2-np_erf(x/(2*(w*s)**(1/2)))
    
    pl.figure()
    pl.hold(True)
    pl.plot(x,e)
    pl.xlabel('x')
    pl.ylabel('y')
    pl.show()
Sicher strotzt der Versuch nur so vor Unzulänglichkeiten. Am gravierendsten für mich ist allerdings, dass die einzelnen Plots nicht wie im Matlabbeispiel in einer "figure" dargestellt werden bzw. auch mit der errorfunction anscheinend etwas nicht stimmt. Für Hilfe zu diesem Problem und auch bzgl. anderer problematischer Dinge wäre ich sehr dankbar.

Re: Mehrere Plots in einer Figure

Verfasst: Montag 11. Mai 2015, 07:51
von MagBen
Im Matlab Script ist das figure() Kommando außerhalb der Schleife und wird nur 1 Mal aufgerufen, im Python Script ist es innerhalb der Schleife und wird für jede Kurve aufgerufen. Deshalb hast Du in Matlab 1 "figure" und in Python 6 "figure". Den show() Befehl solltest Du auch aus der Schleife rausziehen und erst nach der Schleife aufrufen. Den Befehl hold() brauchst Du bei Matplotlib eigentlich nie. Die Funktion erf() gibt's zwar nicht in Numpy aber in Scipy: scipy.special.erf. Wenn Du Numpy benutzt, dann solltest Du das Modul math vermeiden. Die Funktion vectorize() ist nur eine Notlösung.
(w*s)**(1/2) ist ganz schlecht, bei Python 2 kommt da immer 1 raus und auch bei Python 3 ist np.sqrt(w*s) viel besser.