Seite 1 von 1

n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Freitag 11. Mai 2012, 09:13
von The Spirit
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

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Freitag 11. Mai 2012, 10:37
von gkuhl
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.

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Freitag 11. Mai 2012, 10:47
von The Spirit
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.

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Freitag 11. Mai 2012, 10:51
von EyDu
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]])

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Freitag 11. Mai 2012, 13:41
von The Spirit
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

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Freitag 11. Mai 2012, 13:48
von BlackJack
@The Spirit: Bei mir läuft das fehlerfrei.

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Freitag 11. Mai 2012, 19:13
von The Spirit
argh

danke für den test.
dann werd ich mal montag in der arbeit suchen müssen wo der fehler ist.

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Montag 14. Mai 2012, 08:00
von The Spirit
hi.
hab es gerade getestet, leider bekomm ich immer noch den gleichen fehler.
jemand ne idee, woran das bei mir liegen könnte?
danke

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Montag 14. Mai 2012, 10:08
von gkuhl
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

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Mittwoch 13. Juni 2012, 16:24
von The Spirit
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

Re: n x m Matrix anzeigen: Matplotlib oder was anderes?

Verfasst: Mittwoch 13. Juni 2012, 16:39
von EyDu
Vielleicht solltest du erstmal verraten wie dein Problem überhaupt lautet ;-)