2016-06-22 13 views
1

Ich habe diese Art von Daten:Wie zeichnet man eine 3D-Heatmap oder ein Histogramm über ein Bild in Matlab?

Data = [1:1:9; 1 2 3 4 5 6 7 8 9; 1 2 3 4 5 6 7 8 9 ;1 2 3 4 5 6 7 8 9;1 2 3 4 5 6 7 8 9]; 

ist der erste Eintrag in die Zone von Interesse ist (9 Zonen insgesamt) und die restlichen vier Array-Einträge sind, wie lange etwas in der Zone blieb (gerade jetzt willkürlich dies für Frage

ich mag plotten, wie lange jedes Ding auf einem Bild einer Karte als 3D „Heatmap“ Stil Grundstück in jeder Zone ist die Karte in einen 3x3 Raster wie so unterteilt:..

1 2 3 

4 5 6 

7 8 9 

Wie plane ich das? Ich habe das Contou versucht r und surfen funktioniert, aber ich bin mir nicht sicher, wie ich sie dem Raster zuordnen würde. Ich möchte die Grafik auf einem Kartenbild als meinen letzten Schritt überlagern, aber nur die Graphik zum Laufen zu bringen wäre großartig!

+0

wie würden Sie die 4 verschiedene Dinge zeigen gerne (läßt sich A bis D nennen)? 4 Unterplot, wo jeder eine Heatmap hat, oder die Summe von ihnen oder eine 3D-Ansicht mit gestapelten schwimmenden Oberflächen oder jede andere spezifische Idee? – Finn

+0

@Finn Idealerweise beides, um zu visualisieren, wie sie aussehen. Also, wo A besucht und dann eine zusammenfassende Grafik, wo die wichtigsten Hotspots für alle A-D waren. –

Antwort

0

Sie können imagesc für die 2D-Version oder bar3 für die 3D-Version verwenden, in diesem Beispiel habe ich einige Teilplots erstellt, aber Sie können diese Option natürlich ändern.

Data = [1:1:9; 1 2 3 4 5 6 7 8 9; 1 2 3 4 5 6 7 8 9 ;1 2 3 4 5 6 7 8 9;1 2 3 4 5 6 7 8 9]; 

M = zeros(3,3); 

2D

for ii = 2:size(Data,1) 
    subplot(2,2,ii-1) 
    M(1:end) = Data(ii,:); 
    imagesc(M) 
    colormap jet 
    shading flat %for an exact result 
    % shading interp %for a smooth result 
end 

figure 

3D (auch wenn ich denke, dass die 3D-Ansicht ist nutzlos)

for ii = 2:size(Data,1) 
     subplot(2,2,ii-1) 
     M(1:end) = Data(ii,:); 
     h{ii} = bar3(M) 
     colorbar 
    for k = 1:length(h{ii}) 
     zdata = h{ii}(k).ZData; 
     h{ii}(k).CData = zdata; 
     h{ii}(k).FaceColor = 'interp'; 
    end 
end 
+0

Wie groß ist die Länge b (b)? –

+0

Das war mein Fehler, also entspricht 'length (h {ii})' der Anzahl der Elemente, aus denen die 3D Heatmap besteht. – obchardon

+0

Die 2D-Version funktioniert, aber das 3D gibt einen Fehler in der Zeile: zdata = h {ii} (k) .ZData; unpassende Indexmatrixreferenz. Gibt es auch einen Weg in der 2D-Version, um die Gitternummer auf der Handlung zu überlagern? ungefähr so: http://plato.stanford.edu/entries/consciousness-representational/NumberedGrid1.jpg. Der Grund, dass ich das 3D mag, ist, weil ich diese über ein Bild eines Gebäudes zeichnen möchte. das zeigt, wo alles über den Beobachtungszeitraum war. –

0

Ich bin mir nicht sicher, ob dies ist die Art von Zeichnen Sie das gewünschte Diagramm auf, aber Sie können die Delaunay-Triangulation verwenden, um Ihre Dauerdaten als Fläche über Ihren Gitterpunkten abzubilden. Der MatLab-Dateiaustausch hat eine nette Funktion, um mit dieser Methode etwas zuzuordnen.

Making Surface Plots from Scatter Data

+0

Das sieht nicht genau so aus, wie ich es brauche. Mein Hauptproblem ist, dass ich nicht weiß, wie man es in das 3x3-Raster plotten lässt, das ich habe. Es legt einfach 1-9 auf die Achse und zeichnet es entlang, ich brauche es, um 1-3, 4-6, 7-9 auf separate Abschnitte der Figur zu setzen und dann an jeder dieser Stellen zu plotten. –