使用patch命令的两种不同颜色贴图-Matlab

使用patch命令的两种不同颜色贴图-Matlab,matlab,matlab-figure,Matlab,Matlab Figure,如何为以下补丁 N=120; ids = (1:N/2)'; faces = [ids, ids+1, N-ids, N-ids+1]; c = exp(-6*cos(theta))'; c2 = exp(-6*cos(pi/2-theta))'; theta = linspace(0,2*pi,N+1); theta(end) = []; figure hold on patch('Faces', faces, 'Vertices',[cos(theta);sin(theta)]','

如何为以下
补丁

N=120;   
ids = (1:N/2)';
faces = [ids, ids+1, N-ids, N-ids+1];
c = exp(-6*cos(theta))';
c2 = exp(-6*cos(pi/2-theta))'; 
theta = linspace(0,2*pi,N+1); theta(end) = [];
figure
hold on
patch('Faces', faces, 'Vertices',[cos(theta);sin(theta)]','FaceVertexCData',c, 'FaceColor', 'interp', 'EdgeColor', 'none')
patch('Faces', 1:120, 'Vertices',1.01*[cos(theta);sin(theta)]','FaceVertexCData',c2, 'FaceColor', 'none', 'EdgeColor', 'interp','linewidth',5)
axis equal
这个想法是每个补丁都有一个不同的颜色映射(也有颜色条)


通过将多个颜色贴图堆叠在一起,可以在一个轴上使用它们:

cmapsize = 64;
colormap( [parula(cmapsize); jet(cmapsize)] );
然后,您可以为每个绘图设置
CDATA
属性:

c1 = 1:cmapsize; %this uses the first colormap.
c2 = cmapsize+1 : cmapsize*2; % this uses the second colormap.
在您的情况下,您只需缩放您的
CDATA
,以便第一个绘图的
CDATA
[1,cmapsize]
范围内,而另一个
[cmapsize+1,cmapsize*2]
范围内:

c = normalize(exp(-6*cos(theta)),'range')' * cmapsize;
c2 = normalize(exp(-6*cos(pi/2-theta)),'range')' * cmapsize + cmapsize + 1;
完整代码:

N=120;   
cmapsize = 64;

ids = (1:N/2)';

theta = linspace(0,2*pi,N+1); theta(end) = [];
faces = [ids, ids+1, N-ids, N-ids+1];
c = normalize(exp(-6*cos(theta)),'range')' * cmapsize;
c2 = normalize(exp(-6*cos(pi/2-theta)),'range')' * cmapsize + cmapsize + 1;

figure('colormap', [parula(cmapsize);jet(cmapsize)]);
hold on
patch('Faces', faces, 'Vertices',[cos(theta);sin(theta)]','FaceVertexCData',c, 'FaceColor', 'interp', 'EdgeColor', 'none')
patch('Faces', 1:120, 'Vertices',1.01*[cos(theta);sin(theta)]','FaceVertexCData',c2, 'FaceColor', 'none', 'EdgeColor', 'interp','linewidth',5)
axis equal


测控条 据我所知,每个轴只能有一个色条。但是,您可以在颜色栏中间插入一个分隔符(白色区域),以分隔两种颜色:

spacer = 10;
figure('colormap', [parula(cmapsize); ones(spacer,3); jet(cmapsize)]);
并调整刻度和标签:

f = colorbar;
ticks = linspace(0,cmapsize,5);
f.Ticks = [ticks, ticks + cmapsize + spacer + 1];
f.TickLabels = compose('%d',ticks); % or whatever your tick labels are.
您还需要更改第二个绘图的
CDATA
,以避免使用间隔区:

c2 = normalize(exp(-6*cos(pi/2-theta)),'range')' * cmapsize + cmapsize + 1 + spacer;
这是使用此方法可以获得的结果:


如果这对你来说不够好,你可以考虑在Hoki的注释()/< P>中建议在另一个轴上加上一个轴。这已经在Matlab的中心得到了解答,有很多的说教例子:另一个示例使用经典的“2个叠加的

”来实现相同的结果:谢谢,如何在同一个绘图中显示相邻的两个色条?