|
|
Daten für Konturplot vorverarbeiten |
|
Leech |
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 12.04.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.04.2014, 15:35
Titel: Daten für Konturplot vorverarbeiten
|
|
|
|
|
Hallo zusammen,
letztendlich möchte ich einen conturf-Plot erstellen, aber es geht eher um die Datenvorverarbeitung. Habe trotzdem mal diesen Bereich des Forums gewählt, wenn es nicht passt bitte ich um Entschuldigung, dann am besten verschieben.
Worum es eigentlich geht:
Ich habe eine sehr große Textdatei (CFD-Ergebnisse Temperatur Lambda- Verteilung) in der in einer Zeile ein Zeitschritt enthalten ist und für jeden dieser Zeitschritte 15 Klassen der Temperatur in 15 Klassen Lambda. Also insgesamt 225 Spalten (pus eine mit dem Zeitvektor).
Diese Datei habe ich heute vormittag ordentlich zerlegen können, so dass ich mir pro Zeitschritt (~3000 Zeitschritte) eine Matrix gebastelt habe, die die Daten der 15x15 Klassen enthält. Diese Daten plotte ich (conturf) und speichere das Bild. Am Ende möchte ich die Bilder dann zu einer Animation zusammensetzen. Das alles funktioniert, nur dass die Plots nicht so aussehen, wie ich das gerne hätte. Ich komme bloß leider nicht weiter, wie ich die Daten entsprechend vorbereite.
Genaueres zu den Daten:
Die Matrizen, die ich erstelle sind folgendermaßen aufgebaut:
In x-Richtung (also die Spalten) sind die 15 Temperaturklassen. Diese gehen 0-500K 500-700K 700-900K ... 2900-3100K.
In y-Richtung habe ich die 15 Lambda-Klassen mit der Aufteilung 0-0,12 0,12-0,17 .. 6,19-8,60.
Es ist also eine 15x15 Matrix. Die Zahlen die in dem x/y-Raster stehen sind die Massen in gr (oder anders gedacht der prozentuale Anteil der Gesamtheit, der diesen Konditionen der beiden Klassen angehört).
Was ich haben möchte:
Einen Konturplot mit dieser Daten mit der x -Achse Temperatur 800K bis 3000K und der y-Achse 4 bis 0 (Ja, die y-Achse rückwärts). Lambda-T-Diagramm, die Diesel-Junkies werden es schon bemerkt haben.
Den Plot erstelle ich auch erfolgreich mit den entsprechenden Achsen etc. Nur dass er nicht so aussieht wie erwartet. Und mittlerweile habe ich auch gecheckt, was das Problem ist. Matlab kriegt ja nur die Matrix von mir. Es kann ja nicht wissen, dass es sich um diese Einteilung in 15x15 Klassen handelt. Zumal ich ja auch Klassen am Rand weglasse.
Ich suche also den korrekten Weg diese Daten vorzuverarbeiten.
Auf meiner Suche bin ich fündig geworden und habe herausgefunden, dass die Funktion griddata (http://www.mathworks.de/de/help/matlab/ref/griddata.html) eventuell das ist, was ich suche. Das Problem ist, dass mir mathematisch nicht ganz klar ist, was ich mit den Daten machen muss, damit sie nicht mehr in Klassen verteilt sind mit festen Grenzen sondern quasi als Fläche über den Achsen vorliegen. (Ja, ich weiss nichtmal wie ich das ausdrücken kann was ich meine). Desweiteren verstehe ich die griddata-Funktion nicht so ganz, weil da ja immer 3D-Plots am Ende rauskommen, die ich gar nicht brauche?
Viel Text, tut mir leid. Ich hoffe ich konnte halbwegs erklären woran ich hänge. Beispielcode dazu wüsste ich jetzt nicht so direkt, da es ja mehr um den Vorgang geht der fehlt. Bei Bedarf könnte ich eine der Matrizen bereitstellen.
Vielen Dank im voraus!
Leech
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.04.2014, 17:51
Titel:
|
|
Hallo,
bei all dem Text ist zumindest mir nicht klar geworden, was du erwartest und inwiefern der Contour-Plot davon abweicht.
Hilfreich wäre ein Beispiel einer momentanen Graphik sowie zumindest eine Skizze, wie du dir die angepasste Graphik vorstellst.
Falls es das ist: mit
kann man die Skalierung der x- und y-Achse beeinflussen.
Grüße,
Harald
|
|
|
Leech |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 12.04.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.04.2014, 18:18
Titel:
|
|
Anders ausgedrückt ist das Problem:
ich habe eine Masse angegeben auf einem TemperaturBEREICH und einen LambdaBEREICH. Also keine diskreten Werte an bestimmten Punkte, sondern bezogen auf Intervalle. Das kann man an sich mit einem Konturplot schön darstellen. Nur wie gebe ich Matlabzu verstehen, dass diese Zahlen in den Elementen der besagten Matrizen auf Bereich anzuwenden sind und nicht als diskrete Werte?
Das Problem ist halt, dass sich keine Gebiete ergeben im Konturplot sondern kleine Flecken diskreter Werte.
So besser verständlich?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.04.2014, 19:51
Titel:
|
|
Hallo,
das sieht doch dann eher nach bar3 aus?
Grüße,
Harald
|
|
|
Leech |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 12.04.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.04.2014, 20:01
Titel:
|
|
|
|
|
Nein, kein 3D Plot!
Mini-Beispiel, damit man die Menge der Daten etwas vergisst:
ich habe in x-Richtung 3 Temperatur-Gebiete 0-100K 100-200K 200-300K
und in y-Richtung 3 lambda-Gebiete 0-0,1 0,1-0,2 0,2-0,3
Nun habe ich eine 3x3-Matrix mit Einträgen.
zB 0 0 0
0 0.5 3
0 1 4
Matlab weiß ja aber nicht, dass sich diese Einträge jeweils auf ein Gebiet beziehen?! Ich gebe Matlab eine x-Achse und eine y-Achse (zB linspace, vergessen wir mal dass ich nichtmal den kompletten x,y Bereich der ursprünglichen Matrix plott). Zb die 4 aus der Matrix ist ja quasi die Bergspitze. drum herum ein Plateau niedrigerer Höhe. Dann soll er dass auch so darstellen. Also meinetwegen einen roten Fleck unten rechts. Einen orangen Ring drumherum. Und den Rest als blaues Tal.
Matlab weiß aber nicht, dass diese Matrix Einträge sich auf Intervalle beziehen und keine diskreten Werte sind?!
Ich kanns einfach nicht besser erklären. Aber im Endeffekt ist es genau eine Landkarte mit Höhenlinien, da werden ja Gebiete gezeigt und keine diskreten Werte.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.04.2014, 20:39
Titel:
|
|
Hallo,
alternativ pcolor, oder imagesc?
z.B.
Grüße,
Harald
|
|
|
Leech |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 12.04.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2014, 08:56
Titel:
|
|
|
|
|
Hi,
ich bin mittlerweile weiter gekommen. Das Problem war nicht, dass Matlab nichts von den Intervallen weiß (das scheint die contourf-Funktion hinzubekommen), sondern dass die eigentlichen Werte (also die zugeordneten Werte zu den Bereichen) einen großen Bereich überspannt haben. Ich habe alle Einträge in der Matrix nun so normiert, dass die Werte einen Bereich von 0-1 einnehmen. Und siehe da, der Plot sieht schon weitaus mehr so aus, wie ich das erwartet habe.
Jetzt habe ich ein anderen Problem:
Die eigentliche Achse, die Matlab selbstständig ranplottet geht jeweils von 0-15 (15x15 Matrix). Ich habe mir nun mit linspace in x und y einen Vektor erzeugt, der sich an den Werten orientiert, die die Klassen angeben. Also Temperatur von 0-3300K und lambda von 0-100. Wenn ich diese Achsen aber verändere, verändert sich der Plot absolut garnicht!
Dazu 2 Beispieldarstellungen angehängt. Was muss ich tun, damit der Plot sich so wie es sein sollte mit den Achsen skaliert?
Anbei noch die Matrix, aus der der Beispielplot stammt.
Vielen Dank!
Beschreibung: |
|
Download |
Dateiname: |
Matrix_time_354.57.txt |
Dateigröße: |
887 Bytes |
Heruntergeladen: |
355 mal |
Beschreibung: |
|
Download |
Dateiname: |
2.jpg |
Dateigröße: |
32.93 KB |
Heruntergeladen: |
401 mal |
Beschreibung: |
|
Download |
Dateiname: |
1.jpg |
Dateigröße: |
32.31 KB |
Heruntergeladen: |
357 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.04.2014, 19:03
Titel:
|
|
Hallo,
Zitat: |
Wenn ich diese Achsen aber verändere, verändert sich der Plot absolut garnicht! |
Ich verstehe diesen Satz nicht. Bitte gib doch ein Code-Beispiel dessen, was du machst.
Zitat: |
Was muss ich tun, damit der Plot sich so wie es sein sollte mit den Achsen skaliert? |
Um dir das beantworten zu können, müsste man zunächst mal wissen, wie der Plot sein soll und vor allem wie das vom Ist-Zustand abweicht. Ich zumindest verstehe das nicht.
Grüße,
Harald
|
|
|
Leech |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 12.04.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2014, 20:14
Titel:
|
|
Naja es ist auf den Plots zu sehen. Lambda von 0-bis-100 geändert auf 0-10.
Dem contourf-Befehl übergebe ich die x und y Achse entsprechend mit.
contourf(x,y,Matrix).
Wenn ich den x oder y Vektor ändere, ändert sich zwar wie auf den angehängten Bildern die Achsbeschriftung, aber das Bild nicht. Was ja nicht sein kann.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.04.2014, 20:33
Titel:
|
|
Hallo,
Zitat: |
Wenn ich den x oder y Vektor ändere, ändert sich zwar wie auf den angehängten Bildern die Achsbeschriftung, aber das Bild nicht. |
Das ist genau das Verhalten, das ich erwarten würde. Das Bild könnte lediglich verzerrt werden, wenn die x- oder y-Skala entsprechend verzerrt werden - nicht aber wenn sie gleichmäßig gestreckt werden.
Zitat: |
Was ja nicht sein kann. |
Wie gesagt: es ist genau das Verhalten, das ich erwarten würde. Dementsprechend weiß ich auch nicht, was du dir stattdessen erwarten würdest.
Grüße,
Harald
|
|
|
Leech |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 12.04.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2014, 20:58
Titel:
|
|
Wenn ich nur die y-Achse verändere? Oder nur die x-Achse? Ich meinte nicht, dass ich die gleichmäßig verzerre!
Ich geben dem contourf Befehl nur einen andere x ODER y Vektor und es bleibt derselbe Plot.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.04.2014, 21:08
Titel:
|
|
Hallo,
ist wie gesagt nicht anders zu erwarten, wenn du beispielsweise 10*x statt x oder 10*y statt y übergibst. Eine Verzerrung gäbe es nur, wenn du z.B. 10^x statt x oder 10^y statt y übergibst, oder etwas anderes nichtlineares.
Grüße,
Harald
|
|
|
Leech |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 12.04.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2014, 21:19
Titel:
|
|
Ah, ok, du meintest doch dasselbe wie ich.
Aber ganz ehrlich. Meine Achse ging von y 0 bis 100. Wenn ich dann auch 0 bis 10 umstelle (ja das ist einfach skaliert), dann müsste ich doch nur den Bereich des ersten Zehntels der y-Achse zu sehen bekommen?!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.04.2014, 21:23
Titel:
|
|
Hallo,
Zitat: |
Wenn ich dann auch 0 bis 10 umstelle (ja das ist einfach skaliert), dann müsste ich doch nur den Bereich des ersten Zehntels der y-Achse zu sehen bekommen?! |
Nein, weil du damit nur die Zuordnung zu y-Werten änderst und nicht den Bildausschnitt an sich.
Wenn du y von 0 bis 100 laufen lässt und dann
einstellst, dann bekommst du in der Tat nur dieses erste Zehntel zu sehen.
Grüße,
Harald
|
|
|
Leech |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 12.04.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2014, 21:30
Titel:
|
|
Ah!!
Das werde ich morgen auf Arbeit mal probieren
Vielen Dank!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|