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 2026)¶

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

Frankfurt am Main 05.06.2026¶

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)

from matplotlib import rcParams
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]:
rcParams.update({
    'figure.figsize'    : [8,8],
#    'text.usetex'       : True,
    'axes.titlesize' : 14,
    'axes.labelsize' : 16,  
    'xtick.labelsize' : 14 ,
    'ytick.labelsize' : 14 
}) 
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]:
Your browser does not support the video tag.

Vector_Dingea.cpp¶

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

from PIL import Image
from matplotlib.ticker import NullFormatter
rcParams.update({
#    'figure.figsize'    : [17.34,13]
    'figure.figsize'    : [9.5,7.5]
}) 
In [7]:
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 [8]:
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[8]:
Your browser does not support the video tag.