2016-10-10 3 views
4

Ditribution of Land use TypesMake Quadrat in der Legende statt Linien Matlab

ich den folgenden Code haben, die eine ‚Karte‘ mit imagesc Plots und stellt eine Legende, siehe Ausgabe beigefügt.

Ich versuche, die Zeilen in der Legende durch ausgefüllte Quadrate zu ersetzen. Meine attamps weit die Linien und den Ad-Hohl Quadrate verlassen (einschließlich einem zufälligen Platz in der oberen linken Ecke der Figur)

figure(6) 
imagesc(lut) 
title('Ditribution of Land use Types') 
ylabel('Longitude') 
xlabel('Latitude') 
caxis([0, 7]) 
myColorMap = jet(6); 

imagesc(lut, 'AlphaData', ~isnan(lut)) 
colormap(myColorMap); 

L = line(ones(6), ones(6)); 
set(L, {'Color'}, num2cell(myColorMap, 2)) 

legend(L, {'Forest','Shrubland','Savanna','Grassland','Agricultural','Barron'}) 
set(L(:),'Marker','s') 
grid on 
ax = gca 
ax.GridAlpha = .2 
ax.XTick = [5 10 15 20 25 30 35 40]; 
ax.YTick = [5 10 15 20 25 30]; 
ax.XTickLabel = {'118^{o}E','123^{o}E','128^{o}E', '133^{o}E', '138^{o}E', '143^{o}E','148^{o}E', '153^{o}E'}; 
ax.YTickLabel = {'13^{o}S','18^{o}S','23^{o}S','28^{o}S','33^{o}S','38^{o}S'}; 
ax.TickLength =[0.0 0.0] 
+0

nicht eine vollständige Antwort, aber für Verbesserungen, können Sie auch die ' 'MarkerFaceColor'' Ihre Linien gesetzt, dass das Quadrat mar füllen Ker. – Hoki

Antwort

4

Verwenden nan zu unsichtbaren Daten (dank @matlatbgui) zu erstellen, und legen Sie L mit allen benötigten Eigenschaften für keine Linie und gefülltes Quadrat-Marker:

% some arbitrary data: 
N = 30; 
lut = diag(1:N)*ones(N)+(diag(1:N)*ones(N)).'; 

% coloring settings: 
caxis([0, 7]) 
myColorMap = jet(6); 

% plotting: 
imagesc(lut, 'AlphaData', ~isnan(lut)) 
colormap(myColorMap); 

% Setting the legend: 
L = line(nan(6), nan(6),'LineStyle','none'); % 'nan' creates 'invisible' data 
set(L, {'MarkerEdgeColor'}, num2cell(myColorMap, 2),... 
    {'MarkerFaceColor'},num2cell(myColorMap, 2),... % setting the markers to filled squares 
    'Marker','s'); 
legend(L, {'Forest','Shrubland','Savanna','Grassland','Agricultural','Barron'}) 

und Sie brauchen nicht Ihre Linie:

set(L(:),'Marker','s') 

legend

+0

In der Tat! Aber warum '-2' für Koordinaten? Ich glaube, du hast vergessen, es zu entfernen? – erfan

+0

Es ist loszuwerden der _ "zufällige Quadrat in der oberen linken Ecke" _ :) – EBH

+0

Ja, aber nicht diesen Punkt sowieso die Achsengrenzen ändern und wieder erscheinen? Ich denke du solltest die Limits bekommen und sie nach 'line' wieder setzen – erfan

1

Der Platz auf der linken oberen Ecke ist offensichtlich wegen set(L(:),'Marker','s'), die ein Quadrat zieht an Anfangs- und Endpunkt der Linien, unter [1, 1]. Statt die 'Marker' ändern, wenn Sie die 'LineWidth' erhöhen, erhalten Sie viel bessere Ergebnisse mit:

L = line(ones(6), ones(6)); 
legend(L, {'Forest','Shrubland','Savanna','Grassland','Agricultural','Barron'}) 
set(L(:), 'LineWidth', 10) 

Mit dieser Ausgabe:

enter image description here

Also, wenn Sie nicht machen Plätze beschränkt sind, ich glaube, dass breite Rechtecke bessere Farben sind.

Verwandte Themen