einfachen Graph plotten mit "abhängiger" x-Achse

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
Tabagari
User
Beiträge: 6
Registriert: Donnerstag 29. Dezember 2016, 17:17

Hallo,

ich habe ein bestimmt ganz simples Problem, habe auch schon viel rumprobiert und versucht zu recherchieren, aber da ich absolut keine Ahnung habe, hat es das irgendwie nicht gebracht.

Und zwar möchte ich schlicht und einfach folgende Funktion plotten:

1/np.sqrt(1+(x/1700)**2)

Nun möchte ich das ganze aber nicht über x auftragen, also ich möchte nicht: plt.plot(x,1/np.sqrt(1+(x/1700)**2)), sondern ich möchte es über ln(1700/x) auftragen.

Also so etwas in dem Stil:

plt.plot(np.log(1700/x) , 1/np.sqrt(1+(x/1700)**2))

Geht so was prinzipiell?

Der Wertebereich von x soll dabei zwischen 159 und 160000 liegen, was ich so darstellen würde: x=np.arange(159,160000)

Ich bekomme jedoch immer keinen Graphen und nur eine Fehlermeldung, die sagt

RuntimeWarning: divide by zero encountered in log (dass ich nicht durch 0 teilen sollte, ist mir klar, aber das tue ich doch gar nicht?)
bzw invalid value encountered in subtract
return np.amin(x[1:] - x[0:-1]) >= 0
was ich gar nicht verstehe.

Ich wurde mit python mehr oder minder ins kalte Wasser geschmissen und muss es nur nutzen um ein paar Messergebnisse zu veranschaulichen und habe eigentlich ehrlich gesagt keine Ahnung davon.
Ich sehe ein, dass meine Frage vllt ziemlich dumm ist, aber ich würde mich wirklich sehr freuen, wenn jmd kurz drüber nachdenkt und mir vllt meinen Denkfehler erklärt.

Vielen Dank!
Tabagari
User
Beiträge: 6
Registriert: Donnerstag 29. Dezember 2016, 17:17

Außerdem habe ich grade gemerkt, dass das eigentlich in "Wissenschaftliches Rechnen" gehört o.o
Shame on me!
trublu
User
Beiträge: 18
Registriert: Montag 20. Juni 2016, 20:05

Tabagari hat geschrieben: RuntimeWarning: divide by zero encountered in log (dass ich nicht durch 0 teilen sollte, ist mir klar, aber das tue ich doch gar nicht?)
Das Geheimnis ist hier die Integer Division. Vergleiche selbst

Code: Alles auswählen

>>> x=np.arange(159,160000)
>>> 1700/x
array([10, 10, 10, ...,  0,  0,  0])
>>> 1700.0/x
array([  1.06918239e+01,   1.06250000e+01,   1.05590062e+01, ...,
         1.06251992e-02,   1.06251328e-02,   1.06250664e-02])
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Tabagari hat geschrieben:dass ich nicht durch 0 teilen sollte, ist mir klar, aber das tue ich doch gar nicht?
(...)
Ich wurde mit python mehr oder minder ins kalte Wasser geschmissen und muss es nur nutzen um ein paar Messergebnisse zu veranschaulichen und habe eigentlich ehrlich gesagt keine Ahnung davon.
Hallo Tabagari, willkommen bei Python!

Es hilft bei solchen Sachen immer, sich einfach mal die Werte ausgeben zu lassen (print), mit denen man gerade arbeitet. Da klären sich solche Vermutungen dann ganz schnell von selbst auf.

Welche Python Version benutzt du übrigens?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Tabagari
User
Beiträge: 6
Registriert: Donnerstag 29. Dezember 2016, 17:17

trublu - danke danke danke
das war des Rätsels Lösung. Woher die zweite Fehlermeldung kam ist mir zwar immer noch nicht klar, aber es funktioniert :)
Da ich mich nie wirklich mit python beschäftigt habe, hab ich nie drüber nachgedacht, als was für einen Datentyp er die Zahlen eig nimmt. Ich hab es einfach nur als Möglichkeit zum plotten gesehen und bei simplen plot Programm muss man über sowas auch nicht nachdenken :)

Kebap - vielen Dank für den Tipp, hab ich heute sogar schon genutzt! Da ich python wie gesagt nur zum plotten genutzt hab, hatte ich den print Befehl vorher auch noch nie verwendet o.o
Python 2.7 nutze ich
Antworten