beschriftetes Histogramm mit Matplotlib aus versch. Arrays

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

Samstag 23. Dezember 2017, 16:59

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
Wie poste ich richtig?
Nachdem du Google, die FAQ und die Suchfunktion erfolgreich ignoriert hast, erstellst du zwei bis fünf neue Themen in den falschen Unterforen mit kreativen Titel und undeutlichen Text, unter dem sich jeder etwas anders vorstellen kann.
Benutzeravatar
noisefloor
User
Beiträge: 2365
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Samstag 23. Dezember 2017, 20:13

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: 45
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

Samstag 23. Dezember 2017, 20:43

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.
Wie poste ich richtig?
Nachdem du Google, die FAQ und die Suchfunktion erfolgreich ignoriert hast, erstellst du zwei bis fünf neue Themen in den falschen Unterforen mit kreativen Titel und undeutlichen Text, unter dem sich jeder etwas anders vorstellen kann.
Benutzeravatar
noisefloor
User
Beiträge: 2365
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Samstag 23. Dezember 2017, 21:45

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: 7610
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 23. Dezember 2017, 23:22

@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