Как добавить масштабированную цветную полосу к линейным графикам, используя цветовую карту в MATLAB? - PullRequest
1 голос
/ 18 апреля 2019

Ответ на Линейный график цветовой карты Matlab объясняет, как использовать цветные карты с линейными графиками, но как добавить масштабированную цветную полосу к рисунку, как в случае точечной диаграммы?

xHorz = [0:0.001:2*pi];
nPts = numel(xHorz);
x = zeros(nPts,1);
x(:,1) = xHorz;
y = sin(x);

noiseMag = 1;
yNoise = y + noiseMag*randn(nPts,1);

winSizes = [100:100:2000];
nWins = numel(winSizes);

ySm = zeros(nPts,nWins);
for iWin = 1:nWins
    ySm(:,iWin) = smoothdata(yNoise,'loess',winSizes(iWin));
end

xScatter = repmat(x,1,nWins);
zScatter = repmat(winSizes,nPts,1);

f1 = figure;
scatter3(xScatter(:),zScatter(:),ySm(:),2,zScatter(:),'filled')
cbar = colorbar;
cbar.Label.String = 'Smoothing Window Size';

f2 = figure;
lineColors = parula(nWins);
for iWin = 1:nWins
    plot(x,ySm(:,iWin),'Color',lineColors(iWin,:),'LineWidth',2);
    hold on
end

2D линия без цветовой шкалы:

3D-разброс с цветовой шкалой:

Я считаю, что для функции smoothdata() требуется R2017a или более поздняя версия.

1 Ответ

1 голос
/ 18 апреля 2019

После построения линий, как вы делаете сейчас, вы можете добавить цветную полосу следующим образом:

colormap(lineColors);
cbar = colorbar;
cbar.Label.String = 'Smoothing Window Size';
N = 5;    % number of ticks
cbar.Ticks = linspace(0,1,N);
cbar.TickLabels = linspace(winSizes(1),winSizes(end),N);

По умолчанию цветная полоса изменяется от 0 до 1. Я просто изменил метки, связанные сэтот интервал.Это производит:

image

Note that I used lineColors as the color map for the figure. This is what determines the colors in the color bar. You can also do colormap parula to get a smoother color gradient.


An alternative is to change the actual intervals. The plot's axes have a CLim property that directs this. You could thus simply do:

colormap(lineColors);
set(gca,'clim',winSizes([1,end]))
cbar = colorbar;
cbar.Label.String = 'Smoothing Window Size';
...