Seite 1 von 1

Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 19:10
von BigBoy
Hallo,
Ich beschäftige mich seit kurzen mit Python 2.7.14 und wolle nun einen Graphen anzeigen lassen. Das Problem welches ich jetzt habe ist, dass wenn ich das Programm starte eine Fehlermeldung bekomme und nicht weiß wie ich das löse.

Ich hoffe ihr könnt mir mit diesem Fehler helfen.

Ich danke euch schon mal im Vorraus.

Hier mein Program

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 5, 0.1)
y = np.sin(y)
plt.plot(y)
plt.show()
Hier der Fehler

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Python27/plot_test.py", line 6, in <module>
    plt.plot(x,y);
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 3229, in plot
    ax = gca()
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 959, in gca
    return gcf().gca(**kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 588, in gcf
    return figure()
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 534, in figure
    **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line 170, in new_figure_manager
    return cls.new_figure_manager_given_figure(num, fig)
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1049, in new_figure_manager_given_figure
    window = Tk.Tk(className="matplotlib")
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1824, in __init__
    self.readprofile(baseName, className)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1876, in readprofile
    class_tcl = os.path.join(home, '.%s.tcl' % className)
  File "C:\Python27\lib\ntpath.py", line 85, in join
    result_path = result_path + p_path
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 17: ordinal not in range(128)

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 19:19
von kbr
Tja - irgendwo in deinem nicht gezeigten Programm hast du einen Encoding-Error.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 19:25
von BigBoy
Entschuldigung, da habe ich den doch glatt vergessen. Ich habe ihn jetzt hinzugefügt.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 19:43
von noisefloor
Hallo,

die Fehlermeldung passt immer noch nicht zum gezeigten Programm. 1. hast du im Listing keine Zeile `plt.plot(x,y)` - da tritt aber der Fehler aus. 2. tritt der Fehler bei besagtem Befehl in Zeile 6 auf - da steht aber `plt.show()`.

Also entweder muss du die zum Code passenden Fehlermeldung zeigen oder andersrum. Ab so wie gerade bringt das nix.

Gruß, noisefloor

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:00
von BigBoy
Gott, Ich sollte echt langsam mal ins Bett gehen. So jetzt nochmal. Jetzt sollte alles passen.

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 5, 0.1)
y = np.sin(x)
plt.plot(y)
plt.show()

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python27\plot_test.py", line 6, in <module>
    plt.plot(y)
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 3229, in plot
    ax = gca()
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 959, in gca
    return gcf().gca(**kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 588, in gcf
    return figure()
  File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 534, in figure
    **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line 170, in new_figure_manager
    return cls.new_figure_manager_given_figure(num, fig)
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1049, in new_figure_manager_given_figure
    window = Tk.Tk(className="matplotlib")
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1824, in __init__
    self.readprofile(baseName, className)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1876, in readprofile
    class_tcl = os.path.join(home, '.%s.tcl' % className)
  File "C:\Python27\lib\ntpath.py", line 85, in join
    result_path = result_path + p_path
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 17: ordinal not in range(128)

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:15
von narpfel
Das sieht für mich so aus, als würde Tkinter nicht richtig mit dem Encoding einer Nicht-ASCII-Zeichenkette umgehen. Kann es sein, dass du ein Sonderzeichen (vielleicht ein „ö“?) in deinem Benutzernamen hast?

Edit: Die Fehlermeldung passt übrigens immer noch nicht zum gezeigten Code, der hat nämlich kein Semikolon in Zeile 6.

Außerdem ist es keine gute Idee, eigene Programme im Python-Installationsverzeichnis abzulegen.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:19
von BigBoy
Leider nicht

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:21
von narpfel
Und in dem Verzeichnis, aus dem du das Programm aufrufst?

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:24
von BigBoy
Ich habe nur den Unterstrich im Projektnamen.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:28
von noisefloor
Hallo,

also unter Python 3.5 auf Ubuntu 16.04 funktioniert der Code wie gezeigt.

Was ich gerade auch nicht verstehe: y enthält nur Zahlen, von den ASCII-Zeichen her also nur 0-9 und den Punkt. Das kann IMHO den Fehler in der Zeile `plt.plot(y)` doch gar nicht generieren?

Gruß, noisefloor

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:33
von narpfel
@BigBoy: Was sagt das Programm, wenn du über die Imports folgendes einfügst:

Code: Alles auswählen

import os
print os.environ.get("HOME", "HOME not present")
print os.curdir
@noisefloor: Der Fehler tritt im Tk-Backend von matplotlib auf, in dieser Methode, die nichts mit dem Plot an sich zu tun hat. Zumindest verstehe ich den Traceback so.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:46
von BigBoy
Das Ergebnis ist C:\Users\Mein Name\AppData\Roaming\SPB_Data

Allerdings ist in meinem Namen ein ö

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:51
von noisefloor
Hallo,

@narpfel: ja, verstehe ich auch so. Es wundert mich trotzdem, dass das Modul an so was scheitert...

@BigBoy: wenn du folgenden Code ausführst:

[codebox=pycon file=Unbenannt.txt]>>> import os
>>> os.environ['HOME'][/code]
Ist dann in der Ausgabe ein nicht-ASCII Zeichen wie äöüß?

Gruß, noisefloor

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:54
von BigBoy
@noisefloor Ja. Da ist eins in meinem Namen.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:54
von narpfel
Also ist in deinem Benutzernamen ein „ö“.

Anscheinend hat Tkinter ein Problem damit. Geht es, wenn du das Programm mit `python -E` aufrufst? Das verhindert, dass Tkinter versucht, Konfigurationsdateien aus deinem HOME-Verzeichnis zu lesen. Allerdings führt das auch dazu, dass Python einige potentiell wichtigen Umgebungsvariablen ignoriert.

Alternativ könntest du ein anderes matplotlib-Backend benutzen. Dazu müsstest du allerdings GTK oder Qt installieren.

Als dritte Alternative könntest du einen Benutzernamen ohne Nicht-ASCII-Zeichen benutzen.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 20:59
von noisefloor
Hallo,

oder du nimmst Python 3, da sollte das auch kein Problem sein.

Da Python 2.7 ja sowie in nicht allzu langer Zeit EOL ist, spricht das so wie so für den Wechsel - sofern du nicht #ausgründen unbedingt Python 2.7 brauchst.

Gruß, noisefloor

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 21:02
von narpfel
@noisefloor: matplotlib verwendet `unicode_literals` und damit versucht `os.path.join`, den `latin_1`-kodierten Bytestring (?), den `os.environ["HOME"]` zurückgibt, mit dem ASCII-Codec zu dekodieren, um das `+` auszuführen.

@BigBoy: Wenn du Python 2.7 nicht unbedingt brauchst, würde ich auch zu Python 3 raten.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 21:07
von BigBoy
Danke für die Hilfe. Ich habe Python jetzt auf meinem zweiten Rechner installiert und dort läuft jetzt alles.

Re: Fehler bei matplotlib

Verfasst: Montag 11. Dezember 2017, 21:47
von BigBoy
Ein Wechsel auf Python 3 lohnt sich jetzt nicht mehr. Ich brauche das nur für ein einziges Projekt und danach deinstalliere ich es wieder, da ich in meiner Freizeit nicht programmiere.