n x m Matrix anzeigen: Matplotlib oder was anderes?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Freitag 11. Mai 2012, 09:13

Hi.
Bisher habe ich mein graphische Ausgabe und Aufbereitung immer mittels R und rpy gemacht.
Da ich aber nicht auf allen Rechnern immer R installieren kann und darf, will ich jetzt auf etwas anderes umsteigen.
Habe mir jetzt mal matplotlib angesehen.
Dort habe ich die Funktion showmat gefunden.
Damit klappt es schon ganz gut.
Jedoch habe ich keine matrix die n x n groß ist sondern n x m.
Somit bekomme ich natürlich kein "quadratisches" bild.
Leider habe ich jetzt keine geeignate scale möglichkeit gefunden um das bild quadratisch zu machen.
Dahe die erste frage,
wie kann ich das mit matplotlib machen.
Bzw. als zweite Frage, würdet ihr mir gleich ein anderes Package empfehlen, womit ich matrizen einfach plotten kann.
Vielen Dank,
Andreas
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Freitag 11. Mai 2012, 10:37

Hi,

`matshow` ist in den Möglichkeiten recht beschränkt. Verwende stattdessen `imshow`, `pcolor` oder `pcolormesh`. Hier mal ein kleines Beispiel:

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np

A = np.random.randn(10,5)
fig = plt.figure(figsize=(6,6))
ax = fig.add_axes([0.1,0.1,0.8,0.8])
ax.pcolormesh(A)
plt.show()
Grüße
Gerrit

Edit: Die matplotlib gallery ist auf jeden Fall einen Blick wert.
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Freitag 11. Mai 2012, 10:47

hi.
danke für die info.
hab grad gesehen, das dein A ja ne echte matrix ist.
ich hab hier "leider" listen in listen.
muss mal schauen, wie ich meine liste in liste matrix in ne echte konvertiert bekomme.
aber schonmal danke dafür.
das ist genau das, was ich gesucht habe.
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Freitag 11. Mai 2012, 10:51

The Spirit hat geschrieben:muss mal schauen, wie ich meine liste in liste matrix in ne echte konvertiert bekomme.

Code: Alles auswählen

>>> numpy.matrix([[1,2,3], [4,5,6], [7,8,9]])
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
Das Leben ist wie ein Tennisball.
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Freitag 11. Mai 2012, 13:41

ich mach das bei mir so (matrix ist ein beispiel wie meine liste in liste aussieht)

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np	
det_matrix = ([[1,2,3], [2,2,3], [2,4,4], [1,2,1]])
numpy_matrix = np.matrix(det_matrix)
fig = plt.figure(figsize=(6,6))
ax = fig.add_axes([0.1,0.1,0.8,0.8])
ax.pcolormesh(numpy_matrix)
plt.show()
leider liefert mir das dann einen fehler

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "D:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 236, in resize
    self.show()
  File "D:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 239, in draw
    FigureCanvasAgg.draw(self)
  File "D:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py", line 401, in draw
    self.figure.draw(self.renderer)
  File "D:\Python27\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "D:\Python27\lib\site-packages\matplotlib\figure.py", line 884, in draw
    func(*args)
  File "D:\Python27\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "D:\Python27\lib\site-packages\matplotlib\axes.py", line 1983, in draw
    a.draw(renderer)
  File "D:\Python27\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "D:\Python27\lib\site-packages\matplotlib\collections.py", line 1281, in draw
    self.update_scalarmappable()
  File "D:\Python27\lib\site-packages\matplotlib\collections.py", line 529, in update_scalarmappable
    raise ValueError('Collections can only map rank 1 arrays')
ValueError: Collections can only map rank 1 arrays
was mache ich hier falsch? steh da grad irgendwie auf dem schlauch.
danke
BlackJack

Freitag 11. Mai 2012, 13:48

@The Spirit: Bei mir läuft das fehlerfrei.
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Freitag 11. Mai 2012, 19:13

argh

danke für den test.
dann werd ich mal montag in der arbeit suchen müssen wo der fehler ist.
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Montag 14. Mai 2012, 08:00

hi.
hab es gerade getestet, leider bekomm ich immer noch den gleichen fehler.
jemand ne idee, woran das bei mir liegen könnte?
danke
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Montag 14. Mai 2012, 10:08

Hab dein Snippet gerade mit Matplotlib 1.1.0 getestet und bekomme ebenfalls deine Fehlermeldung. Scheint als haben "pcolor" und "pcolormesh" Probleme mit Matrizen. Wenn du stattdessen NumPy Arrays benutzt funktioniert es bei mir einwandfrei.

Grüße
Gerrit
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Mittwoch 13. Juni 2012, 16:24

hi.
muss den thread nochmals nach vorne holen.
jetzt klappt das alle schon so wie ich mir das vorstelle.
momentan bin ich dabei, das ich die gui (mit wx) in der ich meine auszuwertende datei darstelle und das pcolormesh in eine gesamtgui zu packen versuche.
leider habe ich hier noch probleme.
kann mir da vielleicht jemand nen schups in die richtige richtung geben?
danke
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 13. Juni 2012, 16:39

Vielleicht solltest du erstmal verraten wie dein Problem überhaupt lautet ;-)
Das Leben ist wie ein Tennisball.
Antworten