Errata
Wenn Sie einen Fehler im Buch finden, eine Frage haben, oder eine Verbesserung vorschlagen möchten, können Sie mich gerne unter der im Impressum angegebenen E-Mail-Adresse kontaktieren.
Änderungen mit Matplotlib 3.7
Mit Matplotlib 3.7 haben sich einige Änderungen ergeben, die dazu führen, dass einige Programme aus dem Buch nicht mehr korrekt ausgeführt werden oder eine Warnung liefern. Fehler beim Aufruf von
set_data
Bis zur Version 3.6 von Matplotlib konnte man, wenn ein Plot nur aus einem Punkt besteht, für die Koordinaten jeweils eine Zahl angeben. Wenn der Plot aus mehreren Punkten besteht, musste man entsprechend für jede Koordinate eine Sequenz (Liste, Tupel oder ein Array) übergeben. Seit Matplotlib 3.7 muss man stets eine Sequenz übergeben.
Examplarisch sei die Änderung an dem Programm Programm 5.5 erläutert. Dort wurde in Zeile 100 die Position des Hundes wie folgt aktualisiert:
plot_hund.set_data(r_hund[n])
Dabei ist r_hund
ein 599×2-Array mit den Koordinaten des Hundes zu jedem berechneten Zeitpunkt. Demzufolge ist r_hund[n]
ein
eindimensionales Array mit 2 Elementen. Matplotlib 3.7 beschwert sich nun,
dass es sich bei den einzelnen Koordinaten um Zahlen handelt und nicht
um Sequenzen. Wir müssen daher aus dem Array mit 2 Elementen zunächst ein
2×1-Array erzeugen. Dies gelingt am einfachsten wir folgt:
plot_hund.set_data(r_hund[n].reshape(-1, 1))
Betroffen sind alle Programme, in denen ein Plot mit nur einem einzelnen Punkt erzeugt wird. Während bei den entsprechenden 2-dimensionalen Darstellungen nur eine Warnung erzeugt wird, werden die Programme mit 3-dimensionalen Darstellungen mit einer Fehlermedlung beendet. Die auf dieser Webseite bereitgestellten Programme wurden bereits entsprechend korrigiert.
Warnung beim Erzeugen eines Farbbalkens mit
fig.colorbar
In einigen Programmen werden physikalische Größen mithilfe einer Farbtabelle dargestellt. In einigen Fällen wird dazu explizit ein sogenannter Mapper erzeugt, beispielsweise in den Programm Programm 6.4:
mapper = mpl.cm.ScalarMappable(cmap=mpl.cm.jet)
Später wird dann ein Farbalken wie folgt erzeugt:
fig.colorbar(mapper, label='Kraft [N]')
Dabei kommt es zu einer Warnung: Der Mapper enthält keinerlei Information
darüber, auf welche Axis sich die Farbdarstellung bezieht. Um den
Farbbalken darzustellen, muss aber der Platz für den Balken von einer Axis
weggenommen werden. Matplotlib muss also erraten, zu welcher Axis der
Farbbalken gehört. Dieses Verhalten wird in zukünftigen Versionen von
Matplotlib wegfallen. Daher muss man die Axis, auf die sich der Farbbalken
bezieht, explizit mithilfe des Arguments
ax=
angeben:
fig.colorbar(mapper, label='Kraft [N]', ax=ax)
Betroffen sind alle Programme, in denen ein Farbalken für einen explizit erzeugten Mapper dargestellt werden soll. Die auf dieser Webseite bereitgestellten Programme wurden bereits entsprechend korrigiert.