Seite 1 von 1

beschriftetes Histogramm mit Matplotlib aus versch. Arrays

Verfasst: Samstag 23. Dezember 2017, 16:59
von TimeMen
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

Re: beschriftetes Histogramm mit Matplotlib aus versch. Arrays

Verfasst: Samstag 23. Dezember 2017, 20:13
von noisefloor
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

Re: beschriftetes Histogramm mit Matplotlib aus versch. Arrays

Verfasst: Samstag 23. Dezember 2017, 20:43
von TimeMen
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.

Re: beschriftetes Histogramm mit Matplotlib aus versch. Arrays

Verfasst: Samstag 23. Dezember 2017, 21:45
von noisefloor
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

Re: beschriftetes Histogramm mit Matplotlib aus versch. Arrays

Verfasst: Samstag 23. Dezember 2017, 23:22
von Sirius3
@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()