2016-10-10 5 views
4

Ditribution of Land use TypesСделать квадрат в легенде вместо линий Matlab

Я следующий код, который Участки под Застройку а «карта» с помощью imagesc, и обеспечивает легенду см приложенный выход.

Я пытаюсь заменить линии в легенде сплошными квадратами. Мои attamps далеко оставляющие линии и рекламные полые квадраты (в том числе случайного квадрата в левом верхнем углу рисунка)

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

Не полный ответ, но и для улучшения, вы можете также установить ' 'MarkerFaceColor'' ваших линий, которые заполнят квадратный мар кег. – Hoki

ответ

4

Использование nan для создания невидимых данных (благодаря @matlatbgui), и установить L со всеми необходимыми свойствами для строки не заполнены и квадратные маркеры:

% 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'}) 

и вам не нужна ваша линия:

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

legend

+0

Действительно! Но почему '-2' для координат? Думаю, ты забыл его удалить? – erfan

+0

Это, чтобы избавиться от «случайного квадрата в верхнем левом углу» _ :) – EBH

+0

Да, но разве эта точка не изменит пределы оси и не появится снова? Я думаю, вы должны получить ограничения и установить их после 'line' снова – erfan

1

квадрат в верхнем левом углу, очевидно, из-за set(L(:),'Marker','s') который рисует квадрат в начальную и конечную точки линий, [1, 1]. Вместо того чтобы изменять 'Marker', если увеличить 'LineWidth', вы получите намного лучшие результаты с:

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

С этого выхода:

enter image description here

Так что, если вы не ограничены, чтобы квадраты, я верьте, что широкие прямоугольники - лучшие флаги для цвета.