Springen naar inhoud

Matlab 2d continu gekleurd figuur met discrete data


  • Log in om te kunnen reageren

#1

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 21 november 2011 - 19:34

Ik ben op zoek naar een methode in Matlab om een matrix/vector dataset in een vlak te plotten. Dat lukt en matlab geeft alle puntjes met bijbehorende intensiteit weer met een stam. Alleen ziet dat er niet uit/kun je er slecht dingen uit aflezen.

Het gaat om de volgende typen data
plaats: (x,y) en intensiteit: (z).
Ik wil dat matlab interpoleert (lineariseert) en een mooi vlak maakt (2d), waarin de kleur een maat is voor de intensiteit. Maar na lang proberen lijkt me dat niet goed te lukken. (Ik kan wel een dergelijk vlak tekenen, maar dan verschijnen er driehoekjes en witte stukken tussen te verbindingslijnen van punten (hij interpoleert in de volgorde van de data(punten)-input, dat is niet de bedoeling....)

Zou iemand me hiermee kunnen helpen? Negeer evt. de laatste zin van vorige alinea - die poging was vrij waardeloos.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 21 november 2011 - 21:29

Kan je die data niet weergeven als afbeelding dan? Dus voor elke (x,y) in de matrix heb je een intensiteit z?
Kijk eens in de help naar 'imshow' of naar 'image', bij imshow kan je geloof ik de x en y assen specificeren.

#3

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 21 november 2011 - 21:58

Is dit wat je zoekt? klik me

#4

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 21 november 2011 - 22:00

Is dit wat je zoekt? klik me


Daar dacht ik ook eerst aan, maar hij wil juist geen surface, hij wil dat de hoogte gegeven wordt door een intensiteit in 2D.

#5

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 21 november 2011 - 22:08

Hm ik heb hier thuis geen matlab, dat zal ik morgen even moeten proberen. Het punt is wel dat we ongeveer 10 datapunten per plot hebben. Dat lijkt me ergens niet helemaal afbeeldingswaardig (maar als daarover geinterpoleerd kan worden, dan wel). Ik zal morgen even kijken - bedankt!

EDIT (evilBro): Ja! Iets dergelijks om de intensiteit aan de geven is prima! Misschien toch even een cursus matlab doen - deze functies zien er redelijk standaard uit. Nou goed - ik ga morgen aan de slag

Veranderd door Axioma91, 21 november 2011 - 22:11


#6

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 21 november 2011 - 22:20

Met slechts 10 datapunten zal er altijd geďnterpoleerd moeten worden, ook voor een surf-plot.

Om het in 2D te krijgen helpt het misschien als je eerst in 3D interpoleert met interp3 en dan naar een afbeelding schrijft.

Als je een dataset geeft wil ik er ook wel eens aan prutsen.

Wat is de context juist, wat voor data wil je laten zien? Want het is niet altijd relevant van de interpoleren.

#7

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 21 november 2011 - 22:46

Met slechts 10 datapunten zal er altijd geďnterpoleerd moeten worden, ook voor een surf-plot.

Om het in 2D te krijgen helpt het misschien als je eerst in 3D interpoleert met interp3 en dan naar een afbeelding schrijft.

Als je een dataset geeft wil ik er ook wel eens aan prutsen.

Wat is de context juist, wat voor data wil je laten zien? Want het is niet altijd relevant van de interpoleren.

De data die ik wil laten zien: de intensiteit van geluid op een afstand r van de speaker onder verschillende hoeken. Dat voor 3 frequenties tussen 30 - 10^5Hz (dacht ik) (we hebben data van frequenties in ongeveer 50 stapjes over dat interval). We selecteren een representatieve hoge, lage en midden frequentie die we apart plotten.

Dat in verschillende ruimten... Ik zal morgen en overmorgen proberen een degelijk 3D geinterpoleerd plaatje(s) te maken (omwille van het komen te beheersen van matlab - dat is ook altijd handig :) )

Het zou overigens helemaal mooi zijn als alle frequenties (dus die 50 datasetjes) in een 3d figuur afgebeeld konden worden. Bijvoorbeeld de plaats (x,y) en de frequentie (z) met kleuren als intensiteitsmaat. Geen idee of zoiets mogelijk is (in maple heb je opties om vlakken doorschijnend te maken, maar dat wordt hier wat lastig). Misschien een dwarsdoorsnede onder een bepaalde hoek - dat zou niet gek zijn.

Nou goed, dat komt later wel (of niet) - eerst een eenvoudig plaatje maken. Dan zet ik morgen meteen de data in m'n mail.

#8

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 21 november 2011 - 22:51

contourf
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

#9

DePurpereWolf

    DePurpereWolf


  • >5k berichten
  • 9240 berichten
  • VIP

Geplaatst op 22 november 2011 - 14:35

contourf lijkt me hier niet helemaal geschikt voor. Imagesc dan weer wel.
Een 4D grafirk (x en Y, intensiteit en frequentie. Is niet echt een goed idee. Meer omvangrijke grafieken maken het niet altijd even duidelijker.
Gebruik dus Meshgrid van EvilBro's link maar in plaats van het plotten met surf of mesh kun je imagesc gebruiken.

#10

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 23 november 2011 - 14:17

Bedankt allemaal, het is gelukt met mesh en surf plots!

#11

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 23 november 2011 - 18:11

Kan je mss ook een resultaat posten? Kzou willen zien wat het uiteindelijk geworden is ;)

#12

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 23 november 2011 - 18:57

Dit plaatje is niet een resultaat van de metingen (een verkeerde X-matrix ingevoerd (die moest ik zelf maken, omdat de grid niet uit "vierkantjes" bestaat)) - dit ziet er dus wat rommelig/ abstract uit. Qua structuur lijkt het er overigens wel op..

Om dit er wat acceptabeler uit te laten zien, ga ik een best fit in origin vinden (het kan vast ook in matlab) en met de gevonden functies een nieuw plaatje plotten. Dat ziet er dan hopelijk iets differentieerbaarder uit in de lengterichting.

Dat is wat omslachtig eigenlijk - is er niet eenzelfde soort mesh functie die een best fit probeert te vinden in beide richtingen? Of gaat dat ook allemaal handmatig??
plaatje.jpg

#13

DePurpereWolf

    DePurpereWolf


  • >5k berichten
  • 9240 berichten
  • VIP

Geplaatst op 24 november 2011 - 11:48

Als het scattered data is zou je dit moeten proberen:
http://www.mathworks.../bsou4rj-1.html

en

http://www.mathworks...eredinterp.html





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures