Einführung in die Programmierung für Studierende der Physik

(Introduction to Programming for Physicists)

Vorlesung gehalten an der J.W.Goethe-Universität in Frankfurt am Main

(Sommersemester 2022)

von Dr.phil.nat. Dr.rer.pol. Matthias Hanauske

Frankfurt am Main 05.05.2022

Visualisierung der Daten der C++ Programme:

Vector_Dinge.cpp und Vector_Dingea.cpp

Vector_Dinge.cpp

In [1]:
# Programm zum Plotten der Daten des Vector-Containers mit 10 Dingen (Vector_Dinge.cpp)

import matplotlib                           # Python Bibliothek zum Plotten (siehe https://matplotlib.org/ )
import matplotlib.pyplot as plt             # Python Bibliothek zum Plotten (siehe https://matplotlib.org/ )
import numpy as np                          # Python Bibliothek fuer Mathematisches (siehe https://numpy.org/ )
import matplotlib.animation as animation
from IPython.display import HTML
In [2]:
params = {
    'figure.figsize'    : [8,8],
#    'text.usetex'       : True,
    'axes.titlesize' : 14,
    'axes.labelsize' : 16,  
    'xtick.labelsize' : 14 ,
    'ytick.labelsize' : 14 
}
matplotlib.rcParams.update(params) 
In [3]:
data = np.genfromtxt("./Vector_Dinge.dat")  # Einlesen der berechneten Daten von Vector_Dinge.cpp
In [4]:
r = 200                                     # Radius eines Dings
plot_min=0                                  # Festlegung der x-Untergrenze (Abmessung Kiste)
plot_max=40                                 # Festlegung der x-Obergrenze (Abmessung Kiste)
anz_teilchen = 10                           # Definition der Anzahl der Dinge

cmap = plt.cm.Blues                                  # Definition der Farbschattierung der Dinge
line_colors = cmap (np.linspace(0.2,1,anz_teilchen)) # Definition der Farbschattierung der Dinge
In [5]:
fig = plt.figure()
ax = fig.gca()

def init():
    it=0
    for i in range(anz_teilchen):                  # for-Schleife ueber die Teilchen in der Kiste
        ax.scatter(data[it,3*i+3],data[it,3*i+4], marker='o', color=line_colors[i], s=r) # Kennzeichnung der Position des Dinges durch einen blauen Kreis
        ax.text(data[it,3*i+3],data[it,3*i+4], str(int(data[it,3*i+2])), fontsize=10, verticalalignment='center', horizontalalignment='center', color="red") # Ding Nr.
    ax.set_xlim(-1,45)                             # Plot-Limit x-Achse
    ax.set_ylim(-1,45)                             # Plot-Limit y-Achse
    ax.set_title(r'Container mit Teilchen')        # Titel der Abbildung
    ax.set_ylabel('y')                             # Beschriftung y-Achse
    ax.set_xlabel('x')                             # Beschriftung x-Achse
    return fig,

def animate(it):
#    print(it)                                     # Terminalausgabe der Erstellung des i-ten Bildes
    ax.cla()
    for i in range(anz_teilchen):                  # for-Schleife ueber die Teilchen in der Kiste
        ax.scatter(data[it,3*i+3],data[it,3*i+4], marker='o', color=line_colors[i], s=r) # Kennzeichnung der Position des Dinges durch einen blauen Kreis
        ax.text(data[it,3*i+3],data[it,3*i+4], str(int(data[it,3*i+2])), fontsize=10, verticalalignment='center', horizontalalignment='center', color="red") # Ding Nr.
    ax.set_xlim(-1,45)                             # Plot-Limit x-Achse
    ax.set_ylim(-1,45)                             # Plot-Limit y-Achse
    ax.set_title(r'Container mit Teilchen')        # Titel der Abbildung
    ax.set_ylabel('y')                             # Beschriftung y-Achse
    ax.set_xlabel('x')                             # Beschriftung x-Achse
#    pic_name = "./Bilder/" + "Vector_Dinge_" + "{:0>3d}".format(it) + ".png" 
#    plt.savefig(pic_name, dpi=200,bbox_inches="tight",pad_inches=0.05,format="png")
    return fig,

ani = animation.FuncAnimation(fig,animate,init_func=init,frames=len(data[:,0]),interval=50)

plt.close(ani._fig)

HTML(ani.to_html5_video())
Out[5]:

Vector_Dingea.cpp

In [44]:
# Python Programm zum Plotten der Daten des Vector-Containers mit 30 Dingen (Vector_Dingea.cpp)

from PIL import Image
from matplotlib.ticker import NullFormatter
params = {
    'figure.figsize'    : [17.34,13]
}
matplotlib.rcParams.update(params)
In [45]:
im = Image.open('./illustration_DeborahMoldawski.jpg')

plt.style.use('dark_background')
nullfmt = NullFormatter() 

data = np.genfromtxt("./Vector_Dingea.dat") # Einlesen der berechneten Daten von Vector_Dingea.cpp

r = 500                                     # Radius eines Dinges
alp = 0.9                                   # Transparenz eines Dinges
plot_max_x = 5334                           # Festlegung der x-Obergrenze (Abmessung Kiste)
anz_teilchen = int(len(data[0,:])/3)        # Definition der Anzahl der Dinge
max_i = len(data[:,0])                      # Anzahl der ausgegebenen Zeitwerte

cmap = plt.cm.nipy_spectral                          # Definition der Farbschattierung der Dinge
line_colors = cmap (np.linspace(0.2,1,anz_teilchen)) # Definition der Farbschattierung der Dinge
In [46]:
fig, ax = plt.subplots()

def init():
    it=0
    ax.yaxis.set_major_formatter(nullfmt)            # Keine Beschriftung der y-Achse
    ax.xaxis.set_major_formatter(nullfmt)            # Keine Beschriftung der y-Achse
    ax.set_xlim(-200,plot_max_x+200)                 # Plot-Limit x-Achse
    ax.imshow(im)                                    # Einbinden des Hintergrundbildes
    for i in range(anz_teilchen):                    # for-Schleife ueber die Teilchen in der Kiste
        ax.scatter(data[it,3*i+3],data[it,3*i+4], marker='o', color=line_colors[i], s=r, alpha=alp) # Kennzeichnung der Position des Dinges durch einen farbigen Kreis
        ax.text(data[it,3*i+3],data[it,3*i+4], str(int(data[it,3*i+2])), fontsize=14, verticalalignment='center', horizontalalignment='center', color="white", alpha=alp) # Ding Nr. 
    return fig,

def animate(it):
#    print(it)                                     # Terminalausgabe der Erstellung des i-ten Bildes
    ax.cla()
    ax.yaxis.set_major_formatter(nullfmt)            # Keine Beschriftung der y-Achse
    ax.xaxis.set_major_formatter(nullfmt)            # Keine Beschriftung der y-Achse
    ax.set_xlim(-200,plot_max_x+200)                 # Plot-Limit x-Achse
    ax.imshow(im)                                    # Einbinden des Hintergrundbildes
    alp=0.9
    if it > max_i-15:                                # Ausblenden der Dinge am Ende
        alp = alp*0.75                               # Ausblenden der Dinge am Ende       
    for i in range(anz_teilchen):                    # for-Schleife ueber die Teilchen in der Kiste
        ax.scatter(data[it,3*i+3],data[it,3*i+4], marker='o', color=line_colors[i], s=r, alpha=alp) # Kennzeichnung der Position des Dinges durch einen farbigen Kreis
        ax.text(data[it,3*i+3],data[it,3*i+4], str(int(data[it,3*i+2])), fontsize=14, verticalalignment='center', horizontalalignment='center', color="white", alpha=alp) # Ding Nr.
#    pic_name = "./Bilder_a/" + "Vector_Dinge_" + "{:0>3d}".format(it) + ".png" # Bild-Ausgabe mit Speicherung eines individuellen Iteration-Namens
#    plt.savefig(pic_name, dpi=200,bbox_inches="tight",pad_inches=0.05,format="png")
#    plt.close()
    return fig,

ani = animation.FuncAnimation(fig,animate,init_func=init,frames=max_i,interval=50)

plt.close(ani._fig)

HTML(ani.to_html5_video())
Out[46]: