Brauche Hilfe zur Funktion imshow

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
fk08
User
Beiträge: 37
Registriert: Donnerstag 20. März 2008, 13:46

Hallo,

hab mittlerweile meine daten soweit umstrukturiert, dass ich folgendes format vorliegen habe:

[[ 1155. 1157. 1131. ..., 1196. 1188. 1163.]
[ 1036. 1035. 1057. ..., 1176. 1181. 1192.]]

wobei dieses array viel größer ist, um zu testen, was imshow damit macht, habe ich lediglich die ersten 2 zeilen genommen.

die länge einer zeile beträgt 3648

das bild welches imshow erzeugt ist total grau, in der mitte verläuft die x-achse bis etwa 3600 und die y-achse ist kaum zu sehen

alles was ich will ist ein intensitätsplot, nachträglich will ich noch die zeit (x-achse) und frequenz achse (y) hinzufügen.
meine daten bewegen sich alle so um die 1200, nur in der mitte des plots habe ich werte von über 3000, dieses möchte ich halt als imageplot darstellen.

sind es einfach zu viele datenpunkte? oder benutze ich die falsche struktur?

danke!

ps. benutze in meinem code pylab

hier exemplarisch, wie ich das obere array erzeugt habe.

Code: Alles auswählen

a = array(number[0])
b = array(number[1])
c = array([a,b])
figure(1)
imshow(c)
show()
fk08
User
Beiträge: 37
Registriert: Donnerstag 20. März 2008, 13:46

hat sich erledigt!

nun wird das bild aber komisch gezeichnet!

wie und wo kann ich die skalierung ändern?

Code: Alles auswählen

imshow(matrix, cmap=None, norm=None, aspect=None, interpolation='gaussian',alpha=1.0, vmin=None, vmax=None, origin=None, extent=None)
oder müssen zusätzliche funktionen importiert werden, mit denen man die achsen verändern kann?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Bitte zeig hier komplette, funktionierenden Code in dem dein Problem auftritt.

Ich z.B. hab keine Ahnung, woher "imshow" kommt...
fk08
User
Beiträge: 37
Registriert: Donnerstag 20. März 2008, 13:46

hallo,
also plotten funktioniert jetzt, allerdings hab ich noch probleme mit den Achsen.
imshow kommt von pylab, bzw. matplotlib, hier der code:

Code: Alles auswählen

#!/usr/bin/python
from pylab import *
import string

#Jede Zeile in der abgespeicherten .dat datei wird eingelesen und als liste abgespeichert.

in_file = open("/home/usr1/uni/python/test2.dat",'r')
data_string = in_file.readlines() 
number = []
for i in range(0,len(data_string)):
	a = map(float, data_string[i].split())
	number += [a]
#headder wird in die liste headder_data geschrieben
header_data = []
for i in range(0,5):
	b = number[0].pop(0)
	del number[0]
	header_data += [b]
#umwandlung der daten in ein array, damit imshow sie plotten kann.
matrix = []
for i in range(0,len(number)):
	teil_matrix = array(number[i])
	matrix += [teil_matrix]

matrix = transpose(matrix)
figure(1)

fig1 = imshow(matrix, cmap=None, norm=None, aspect=None, interpolation='gaussian',alpha=1.0, vmin=None, vmax=None, origin=None, extent=None)
colorbar()
show()

size von matrix ist etwa 3600 Spalten und 300 Zeilen. Bisweilen(default-mäßig) nimmt imshow diese Zahlen zur Konfiguration der Achsen. Ich möchte aber selbst definierte (aus der headder datei) achsen generieren, weiß aber nicht, wo diese als parameter für die imshow hineingehören.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Laut http://matplotlib.sourceforge.net/matpl ... ml#-imshow musst du das aber ander angehen:
IMSHOW(X) - plot image X to current axes, resampling to scale to axes
size (X may be numpy array or PIL image)
Also erstellst du erst deine zusätzlichen Achsen und rufst imshow dann auf.

btw: Bitte keine `from fo import *`, das macht den Quelltext unlesbar.
fk08
User
Beiträge: 37
Registriert: Donnerstag 20. März 2008, 13:46

was meinst du mit:
btw: Bitte keine `from fo import *`, das macht den Quelltext unlesbar.

also kein

Code: Alles auswählen

from pylab import *
?
ich sehe kein **kwargs in der imageshow funktion,wo man die x/y achsen reinladen kann.

klar, ich kann vor imshow mir 2 vektoren als achsen erzeugen, aber irgendwo muss man doch imshow sagen, dass es diese nehmen soll.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

fk08 hat geschrieben:was meinst du mit:
btw: Bitte keine `from fo import *`, das macht den Quelltext unlesbar.

also kein

Code: Alles auswählen

from pylab import *
?
Exakt.
ich sehe kein **kwargs in der imageshow funktion,wo man die x/y achsen reinladen kann.

klar, ich kann vor imshow mir 2 vektoren als achsen erzeugen, aber irgendwo muss man doch imshow sagen, dass es diese nehmen soll.
Bei Pylab gibts jedenfalls nen Beispiel dazu: examples/axes_demo.py
Ansonsten...ich kenn mich mit Pylab nicht aus :D
Antworten