beschriftetes Histogramm mit Matplotlib aus versch. Arrays

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

Hallo und frohe Weihnachtszeit,

Ich möchte das Buchstabenvorkommen in einem String analysieren und dabei ein Histogramm ausgeben lassen, dass die Analyse visualisiert.
Meine Daten die ich bekomme sehen wie folgt aus:

Text = "Das ist ein Text"
BuchstabenArray = ['a', 'b', ..., 'z']
BuchstabenVorkommen = [6.25, 0.0, ..., 0.0]

Das Histogramm soll nun einfach die Häufigkeit der Buchstaben a-z alphabetisch anzeigen und die Balken sollen mit dem jeweiligen Buchstaben beschriftet sein.
Ich habe jetzt x Tutorials mit matplotlib durch, aber nie hat es mit der Beschriftung geklappt, bzw. manche Werte wurden einfach verschluckt.

Wie würdet ihr das denn machen mit dem Histogramm?
Ein grobes Beispiel wäre gut, anpassen kann ich es dann schon selber an meine Variablen.

LG
TimeMen
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie kann denn ein Buchstabe 6.25 mal vorkommen?

Unabhängig davon: Verstehe ich das richtig, dass `BuchstabenVorkommen` eine Liste mit 26 Elementen ist?
Wenn ja: dann brauchst du doch kein Histrogramm generieren, sondern nur ein Balkendiagramm...

Variablennamen schreibt man bei Python übrigens klein_mit_unterstrich.

Gruß, noisefloor
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

Hallo,

Das war ja nur ein Beispiel. Das Vorkommen ist in Prozent, bei längeren Texten sind das dann durchaus auch Zahlen wie 6.25.
Kann auch sein, dass ein Balkendiagramm geeignet wäre, doch auch da habe ich das Problem, dass die Anzeige bzw. die Annotations nicht funktionieren.
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

funktioniert wie hier (https://matplotlib.org/examples/pylab_e ... _demo.html) gezeigt. Mini-Beispiel:

[codebox=pycon file=Unbenannt.txt]>>> import matplotlib.pyplot as plt
>>> from random import randint
>>> values = [randint(0, 15) for _ in range(0, 26)]
>>> ticklabels = [chr(x) for x in range(97, 97+26)]
>>> ticklabels
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
>>> bar_width = 0.5
>>> x = [x for x in range(1, 27)]
>>> plt.bar(x, values, bar_width)
<Container object of 26 artists>
>>> plt.xticks(x, ticklabels)
([<matplotlib.axis.XTick object at 0x7ff16cf01710>, ... <matplotlib.axis.XTick object at 0x7ff16c5da470>], <a list of 26 Text xticklabel objects>)
>>> plt.show()
>>> [/code]

Gruß, noisefloor
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@noisefloor: statt `chr` kann man direkt string.ascii_lowercase nehmen, und die restlichen magischen Zahlen per `len` eliminieren:

Code: Alles auswählen

import string
from random import randint
import matplotlib.pyplot as plt
characters = string.ascii_lowercase
values = [randint(0, 15) for _ in characters]
x = range(len(values))

plt.bar(x, values)
plt.xticks(x, characters)
plt.show()
Antworten