Fehler bei matplotlib

Probleme bei der Installation?
BigBoy
User
Beiträge: 9
Registriert: Montag 11. Dezember 2017, 19:01

Montag 11. Dezember 2017, 19:10

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)
Zuletzt geändert von BigBoy am Montag 11. Dezember 2017, 19:24, insgesamt 1-mal geändert.
Benutzeravatar
kbr
User
Beiträge: 895
Registriert: Mittwoch 15. Oktober 2008, 09:27

Montag 11. Dezember 2017, 19:19

Tja - irgendwo in deinem nicht gezeigten Programm hast du einen Encoding-Error.
BigBoy
User
Beiträge: 9
Registriert: Montag 11. Dezember 2017, 19:01

Montag 11. Dezember 2017, 19:25

Entschuldigung, da habe ich den doch glatt vergessen. Ich habe ihn jetzt hinzugefügt.
Benutzeravatar
noisefloor
User
Beiträge: 2427
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Montag 11. Dezember 2017, 19:43

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
BigBoy
User
Beiträge: 9
Registriert: Montag 11. Dezember 2017, 19:01

Montag 11. Dezember 2017, 20:00

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)
Zuletzt geändert von BigBoy am Montag 11. Dezember 2017, 20:23, insgesamt 1-mal geändert.
narpfel
User
Beiträge: 213
Registriert: Freitag 20. Oktober 2017, 16:10

Montag 11. Dezember 2017, 20:15

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.
BigBoy
User
Beiträge: 9
Registriert: Montag 11. Dezember 2017, 19:01

Montag 11. Dezember 2017, 20:19

Leider nicht
narpfel
User
Beiträge: 213
Registriert: Freitag 20. Oktober 2017, 16:10

Montag 11. Dezember 2017, 20:21

Und in dem Verzeichnis, aus dem du das Programm aufrufst?
BigBoy
User
Beiträge: 9
Registriert: Montag 11. Dezember 2017, 19:01

Montag 11. Dezember 2017, 20:24

Ich habe nur den Unterstrich im Projektnamen.
Benutzeravatar
noisefloor
User
Beiträge: 2427
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Montag 11. Dezember 2017, 20:28

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
narpfel
User
Beiträge: 213
Registriert: Freitag 20. Oktober 2017, 16:10

Montag 11. Dezember 2017, 20:33

@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.
BigBoy
User
Beiträge: 9
Registriert: Montag 11. Dezember 2017, 19:01

Montag 11. Dezember 2017, 20:46

Das Ergebnis ist C:\Users\Mein Name\AppData\Roaming\SPB_Data

Allerdings ist in meinem Namen ein ö
Benutzeravatar
noisefloor
User
Beiträge: 2427
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Montag 11. Dezember 2017, 20:51

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
BigBoy
User
Beiträge: 9
Registriert: Montag 11. Dezember 2017, 19:01

Montag 11. Dezember 2017, 20:54

@noisefloor Ja. Da ist eins in meinem Namen.
narpfel
User
Beiträge: 213
Registriert: Freitag 20. Oktober 2017, 16:10

Montag 11. Dezember 2017, 20:54

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.
Antworten