Ich versuche, eine stückweise Funktion in Matplotlib zu zeichnen. Mein Filteransatz (die auf Ami Antwort basiert here) nicht funktioniert:Plotten Stückweise Funktionen in Python
ValueError: x and y must have same first dimension
Können Sie das Problem zu beheben, bitte?
import numpy as np
import matplotlib.pyplot as plt
gK_inf = 7.06
gK_0 = 0.09
tauN = 0.75
gK_inf1 = 0.09
gK_01 = 7.06
tauN1 = 1.1
def graph(formula, formula1, t_range):
t = np.fromiter(t_range, np.float)
gK = formula(t)
gK1 = formula1(t)
plt.plot(t,gK)
plt.plot(t,gK1)
plt.xlabel(r"$t(msec.)$")
plt.ylabel(r"$g_K$")
plt.show()
def my_formula(t):
if np.all(t>0) and np.all(t<5):
return np.power((np.power(gK_inf,0.25))-((np.power(gK_inf,0.25)-np.power(gK_0,0.25))*np.exp(-t/tauN)),4)
else:
return 0
def my_formula1(t):
if np.all(t>5) and np.all(t<10):
return np.power((np.power(gK_inf1,0.25))-((np.power(gK_inf1,0.25)-np.power(gK_01,0.25))*np.exp(-t/tauN1)),4)
else:
return 0
graph(my_formula, my_formula1, np.arange(0,10,0.1))
Update:
Nach @ Michael Beratung wird der Fehler beseitigt, aber das Ergebnis ist nicht das, was es sein muss:
Eigentlich formula
und formula1
muss in den Bereichen [0,5]
bzw. [5,10]
geplottet werden. Diese
ist das, was ich brauche:
Ist der Plot im Update eine erwartete Ausgabe? Dann verstehe ich nicht, warum Sie 'np.all' und die' return 0' für die blaue Kurve verwenden (geht nicht für t> 5 auf Null). Bitte geben Sie genauer an, was Sie wollen (neben der Behebung der Fehlermeldung). – Michael
@Michael: Du hast Recht. Die Logik meines Codes ist nicht das, was er sein soll. Ich hatte eine Skizze hinzugefügt, um zu illustrieren, was ich brauche, wenn Sie es bitte überprüfen. – Roboticist
ok, also willst du * eine * Kurve. Ich denke, ich verstehe es jetzt. Ich werde es versuchen und dann meine Antwort bearbeiten. – Michael