Matplotlib: Bar-Chart unschöne Darstellung

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
PythonCodingFun
User
Beiträge: 49
Registriert: Mittwoch 22. September 2021, 14:01

Hallo Community,


ich arbeite mich gerade in Matplotlib (mit NumPy) ein und fange ganz simpel mit einem Bar-Chart an, welches auch dargestellt wird, aber wie bekomme ich es nicht hin das die Labels richtig zentiert werden, so das man sie noch Lesen kann und nicht "abgeschnitten" werden (siehe Bild). Mit

Code: Alles auswählen

plt.tight_layout()
kann ich die Labels ganz auf das Bild bekommen nur dann ändert sich die Aufteilung der X-Achse und 10 wird nicht mehr dargestellt.
Mir wäre es am lieben die Maße des Bildes würden sich ändern damit ich alles auf das Bild bekomme ohne das was "abgeschnitten" wird.


Bild

Hier mal ein Beispielcodeing:

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np
import random

# Für Zufallswerte
randomlist = []
for _ in range(0, 5):
	n = random.randint(1, 10)
	randomlist.append(n)

fig, ax = plt.subplots()

list = ["LangerString", "SehrLangerString", "String", "kurzerString", "abcdefghijklmnopqrstuvwzyz"]

y_pos = np.arange(len(list))
ax.barh(y_pos, randomlist, align='edge')
ax.set_yticks(y_pos, labels=list, wrap=True)
ax.invert_yaxis()
plt.yticks(
       fontsize=11
)
   
plt.savefig('barchart.png', dpi=300)
plt.show()

Hat jemand eine Idee wie man die Bilder sagen wir es mal richtig Zentiert ?

Über Feedback würde ich mich sehr freuen. :)
Benutzeravatar
__blackjack__
User
Beiträge: 13102
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@PythonCodingFun: Also bei mir wird die 10 auch mit `tight_layout()` noch angezeigt. Bist Du sicher, dass Du überhaupt eine 10 in den Daten hattest? Die werden bei dem Beispiel ja jedes mal zufällig ausgewürfelt, und dann muss natürlich gar keine 10 dabei sein, und dann wird die 10 auch nicht als Tick angezeigt.

Edit: Was irgendwie nicht so toll aussieht sind die Labels/Ticks auf der Y-Achse am oberen Rand der Balken, statt in der Mitte.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
PythonCodingFun
User
Beiträge: 49
Registriert: Mittwoch 22. September 2021, 14:01

__blackjack__ hat geschrieben: Donnerstag 8. Dezember 2022, 10:50 @PythonCodingFun: Also bei mir wird die 10 auch mit `tight_layout()` noch angezeigt. Bist Du sicher, dass Du überhaupt eine 10 in den Daten hattest? Die werden bei dem Beispiel ja jedes mal zufällig ausgewürfelt, und dann muss natürlich gar keine 10 dabei sein, und dann wird die 10 auch nicht als Tick angezeigt.
Ah okay

__blackjack__ hat geschrieben: Donnerstag 8. Dezember 2022, 10:50 Edit: Was irgendwie nicht so toll aussieht sind die Labels/Ticks auf der Y-Achse am oberen Rand der Balken, statt in der Mitte.
ja stimmt das sieht auch komisch aus, hmm.....
Benutzeravatar
__blackjack__
User
Beiträge: 13102
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@PythonCodingFun: Das letztere hast Du aber so gewollt, sonst stünde da ja nicht ``align="edge"``. Der Default-Wert ist nämlich die einfach in die Mitte vom Balken zu setzen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
PythonCodingFun
User
Beiträge: 49
Registriert: Mittwoch 22. September 2021, 14:01

__blackjack__ hat geschrieben: Donnerstag 8. Dezember 2022, 11:27 @PythonCodingFun: Das letztere hast Du aber so gewollt, sonst stünde da ja nicht ``align="edge"``. Der Default-Wert ist nämlich die einfach in die Mitte vom Balken zu setzen.
Cool danke für den Hinweis :-)
PythonCodingFun
User
Beiträge: 49
Registriert: Mittwoch 22. September 2021, 14:01

Ich hab jetzt etwas gefunden bei dem ich glaube das Löst mein Problem:

bbox_inches='tight'

Code: Alles auswählen

plt.savefig("image.png", bbox_inches='tight', dpi=300)
Antworten