WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Farbliche Darstellung für X,Y-Punkt mit Wert

 

qwerob

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2013, 13:56     Titel: Farbliche Darstellung für X,Y-Punkt mit Wert
  Antworten mit Zitat      
Hallo,

ich habe Probleme eine gewünschte Grafik zu erzeugen.

Gegeben:
- ein Haufen Postleitzahlen (ca. 4000) in Deutschland
- Latitude und Longitude der Zentroide
- Farblich darzustellender Wert für jede PLZ

Aktuell bekomme ich zwar eine Grafik erstellt, allerdings habe ich Zweifel an der Richtigkeit. Zudem würde ich am liebsten das ganze noch georeferenziert haben. Sodass man größere Städte/Flüsse einzeichnen könnte. (Worlmaps?!)
Matlab schlägt mir auch triscatteredinterp statt griddata vor, allerdings bekomm ich das gar nicht zum Laufen.

Hier mein aktueller Code:
Code:

    minlat=min(lat); maxlat=max(lat);
    minlong=min(long); maxlong=max(long);
    rangeX  = minlat:0.0001:maxlat;
    rangeY  = minlong:0.0001:minlong+(length(rangeX)-1)*0.0001;
    [X,Y]=meshgrid(rangeX,rangeY);
    Z=griddata(lat,long,WERT,X,Y, 'linear');

    Fig2 = figure;
    hold on
    axis xy
    axis([0 1304 0 750]) % without lat and long
    imagesc(Z) % without lat and long
    %axis([minlat maxlat minlong maxlong])
    %imagesc(lat,long,Z)
    colorbar('location','southoutside')
    hold off
 


Wär super wenn mir hier Jemand weiterhelfen könnte.
Danke! Smile


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.06.2013, 15:38     Titel: Re: Farbliche Darstellung für X,Y-Punkt mit Wert
  Antworten mit Zitat      
Hallo qwerob,

Du hast erklärt, was gegeben ist, aber nicht, was gesucht ist.
Ich weiß nicht, was eine "Zentroide" und was ein "Farblich darzustellender Wert für jede PLZ" ist.

Was hast Du denn für Zweifel an der Richtigkeit? Da wir ja nich wissen, was Du genau erreichen möchtest, können wir dieses wichtige Detail nicht erraten.
Was hast Du denn mit "triscatteredinterp" genau versucht und was bedeutet "bekomm ich das gar nicht zum Laufen" genau? Fehlermeldungen oder unerwartete Ergebnisse?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
qwerob

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2013, 11:55     Titel:
  Antworten mit Zitat      
Naja die Werte stellen meinet wegen die Höhe über Null dar, sodass du danach nen Höhenprofil von Deutschland erhälst. Zentroide heißt schlicht der Flächenschwerpunkt des PLZ-Bezirks. Sind ja leider keine schön, regelmäßig angeordneten Flächen. Genau das stellt auch das größe Problem dar.
Imagesc will eine regelmäßige Matrix zum plotten und die erzeuge (interpoliere) ich gerade mit "griddata".
Letzteres habe ich lediglich versucht durch den von Matlab vorgeschlagenen Befehl zu ersetzen. Das funktioniert leider nicht.
(Die genaue Fehlermeldung kann ich posten, wenn ich wieder am Arbeitsplatz bin)

Bin ich vll auf dem Holzweg und es geht einfacher? zB ohne imagesc und mit worldmaps oder so?
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 27.06.2013, 13:40     Titel:
  Antworten mit Zitat      
Hallo,

wenn du eine Karte plotten möchtest, (was du ja möchtest) und das wohlmöglich noch georeferenziert haben möchtest, musst du dir auch immer über die Wahl der Projektion im Klaren sein.
Es gibt für dein Problem übrigens schon perfekt zusammengeschnittene Lösungen in der m_map toolbox (frei, zum Beispiel hier: http://www.eos.ubc.ca/~rich/map.html )

Wenn du die Daten korrekt vorliegen hast, solltest du (nach dem korrekten "installieren", d.h. die Toolbox zum Suchpfad hinzufügen) der Toolbox nur noch 2 Zeilen Code benötigen, um das graphisch darzustellen. Man muss ja das Rad nicht neu erfinden.

Vermutlich so:
Code:
m_proj('Mollweide','lon',[minlong maxlong],'lat',[minlat maxlat],'rec','off')
m_pcolor(lon,lat,Wert);
shading('interp'); % <--- Interpoliert deine Daten flächig.
 colorbar;




Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
qwerob

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2013, 14:56     Titel:
  Antworten mit Zitat      
Klingt auf jeden Fall schonmal besser. Danke dir!!
Nach (sehr mühsamer) Installation der Toolbox verlangt aber auch pcolor eine Matrix und nicht einen Wert für ein X,Y-Paar.

Code:
minlat=min(lat); maxlat=max(lat);
minlong=min(long); maxlong=max(long);
m_proj('Mollweide','long',[minlong maxlong],'lat',[minlat maxlat],'rec','off')
m_pcolor(long,lat,MMI);
shading('interp'); % <--- Interpoliert deine Daten flächig.
colorbar;



Zitat:
Error using pcolor (line 54)
Color data input must be a matrix.

Error in m_pcolor (line 53)
[h]=pcolor(X,Y,data,varargin{:});

Error in markus (line 162)
m_pcolor(long,lat,MMI)
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 27.06.2013, 18:19     Titel:
  Antworten mit Zitat      
Eieieiei, das war mir nicht klar. Eigentlich hätte es mir aber auffallen können, da pcolor ja Matrizen plotted. Tut mir Leid. Aber es ist ja nicht ausgeschlossen, dass du diese Toolbox trotzdem später für die Graphiken nutzen möchtest (-:.

Ich bin mir aber trotzdem sehr sicher, dass du Dein Problem damit lösen kannst, da ich eigentlich das gleiche schon mal gemacht habe. Und tatsächlich haben wir da auch erst interpoliert.

Code:

x = lat;
y = long;
z = data;
F = TriScatteredInterp(x,y,z);

% x,y Richtungen und Gittergröße (hier musst du vielleicht was anderes Einstellen, damit es schön wird)
tx = linspace(minlat-0.1,maxlat+0.1,100);
ty = linspace(minlong-0.1,maxlong)+0.1,100);
% Gritter erzeugen
[mx,my] = meshgrid(tx,ty);
mz = F(mx,my);

m_proj('Mollweide','long',[minlong maxlong],'lat',[minlat maxlat],'rec','off')
contourf(mx, my, mz)


Versuch mal bitte, ob du damit schon mal grunsätzlich so einen Plot bekommst, wie du ihn haben möchtest. Durch den Contourplot erhältst du dann Höhenlinien mit den interpolierten Werten zwischen den gegebenen Messwerten.

Viele Grüße,
Nras.

Edit: Übrigens kannst du natürlich auch andere Projektionen auswählen. Ich glaube, dass auch oft 'Mercator' benutzt wird, gerade wenn man nicht die ganze Erde darstellen will, sondern zum Beispiel nur Deutschland.
Private Nachricht senden Benutzer-Profile anzeigen
 
qwerob

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2013, 11:22     Titel:
  Antworten mit Zitat      
Super! Keine Fehlermeldung.
Jetzt weist mich matlab nur darauf hin, dass ich auch triscattered nicht verwenden soll, weil es in nem "future release" durch "scatteredInterpolant" ersetzt wird. Allerdings erzeugt das bei mir nur ein wildes Mandala.

Da triscattered ja aktuell noch funktioniert, belass ichs einfach ma dabei.
Was mich wundert ist, wenn ich F im variables editor ansehe, ist x ein 4000x2 double und y 4000x1.
lat und long sind aber beide schlicht 4000x1.

Nun zu der eigentlichen Krux: Wie bekomme ich Städte und Flüsse eingezeichnet? Köln und der Rhein wären mir wichtig.

Vielen Dank schonmal!! Smile
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 28.06.2013, 16:25     Titel:
  Antworten mit Zitat      
Hallo,

für meinen Fall brauchte ich keine Flüsse/Städe oder Grenzen. Diese sind da aber sicher auch irgendwo drin zu finden. Eine Google-Suche nach "m_map river" führt einen auf das hier:
Zitat:
New in release 1.4e are

GSHHS Now comes with the WDB rivers and borders database, and links to them have been added via m_gshhs.m


Das heißt, dass da auf jeden Fall eine Datenbank zu existiert, die man nutzen kann. Da musst du dich aber nun wohl alleine durchwühlen. Du hast da auch sicher mehr Motivation zu als ich (-:.

Nras
Private Nachricht senden Benutzer-Profile anzeigen
 
qwerob

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2013, 15:28     Titel:
  Antworten mit Zitat      
Soooo.. habe endlich eine Lösung gefunden.
Vielleicht gibt es ja noch Leute, die Ähnliches versuchen und denen ich hiermit weiterhelfen kann:

Code:

lat = lat*180/pi; % Umrechnung in Grad
long = long*180/pi;  

minlat=min(lat);
maxlat=max(lat);
minlong=min(long); maxlong=max(long);
rangeX  = minlat:0.001:maxlat;
rangeY  = minlong:0.001:minlong+(length(rangeX)-1)*0.001;
[X,Y]=meshgrid(rangeX,rangeY);
Z=griddata(lat,long,DATEN,X,Y, 'linear'); % Daten interpolieren
Z(isnan(Z))=0;

Fig2 = figure;
hold on
h_img = imagesc(rangeY,rangeX,Z);
colorbar('location','southoutside')
hold off

%%
h = worldmap([minlat-0.5,maxlat+0.5],[minlong-0.5,maxlong+0.5]);
geoshow('landareas.shp', 'FaceColor', [0.15 0.5 0.15])
geoshow('worldlakes.shp', 'FaceColor', 'cyan');
geoshow('worldrivers.shp', 'Color', 'blue');
geoshow('worldcities.shp', 'Marker', '.','Color', 'red');
geoshow(X,Y,Z, 'DisplayType', 'texturemap');  %die interpolierten Daten plotten
 
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.