46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
import matplotlib.pyplot as plt
|
|
|
|
def tabelle_als_bild(spannungen, dateiname="tabelle.png"):
|
|
"""Erstellt eine Tabelle als Bild mit Matplotlib mit farbigen Blitzen und Rahmen.
|
|
|
|
Args:
|
|
spannungen: Eine Liste der Spannungswerte.
|
|
dateiname: Der Dateiname für das gespeicherte Bild.
|
|
"""
|
|
fig, ax = plt.subplots(figsize=(2, len(spannungen)/2 + 0.5))
|
|
|
|
table_data = [["kV"]] # Einheit in der ersten Zeile
|
|
for i, spannung in enumerate(spannungen):
|
|
if i == len(spannungen) - 1: # Letzte Zeile
|
|
table_data.append([f"⚡ {spannung:.1f} ⚡"])
|
|
else:
|
|
table_data.append([f"{spannung:.1f}"])
|
|
|
|
table = ax.table(cellText=table_data, loc='center', cellLoc='center')
|
|
|
|
# Formatierung
|
|
table.scale(1, 1.5)
|
|
ax.axis('off')
|
|
|
|
# Rahmen und Textformatierung
|
|
for (row, col), cell in table.get_celld().items():
|
|
if row == len(spannungen): # Rahmen um die letzte Zeile (mit Blitzen)
|
|
cell.set_edgecolor("red") # Roter Rahmen
|
|
cell.set_linewidth(3)
|
|
text = cell.get_text()
|
|
text.set_text(f"⚡ {spannungen[-1]:.1f} ⚡") # Text neu setzen mit direkter Formatierung
|
|
text.set_fontsize(12)
|
|
text.set_color("black") # Textfarbe wieder auf Schwarz setzen
|
|
for t in text.get_children(): # Durch die Text-Elemente iterieren
|
|
if "⚡" in t.get_text(): # Wenn es ein Blitz ist
|
|
t.set_color("yellow") # Gelbe Farbe setzen
|
|
cell.set_text_props(ha='center', va='center')
|
|
elif row > 0: #alle anderen Zellen außer der ersten zentrieren
|
|
cell.get_text().set_text(f"{spannungen[row-1]:.1f}")
|
|
cell.set_text_props(ha='center', va='center')
|
|
|
|
plt.show()
|
|
|
|
# Beispiele
|
|
spannungen1 = [9.6, 11.2, 12.8, 14.4, 16.0, 17.6]
|
|
tabelle_als_bild(spannungen1, "tabelle_mit_farben_17_6.png") |