matlab - 使用补丁命令的两个不同颜色图 - Matlab
问题描述
如何为以下内容生成两个不同的颜色图patch
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 的评论(一个轴上的多个颜色图)中的建议将一个轴覆盖在另一个轴上。
推荐阅读
- c# - 如何利用 ASP.NET Core LifeCycle 中的 DbContext 池?
- ruby-on-rails - Rails 5:使用 .each 查找或创建
- python - keras 中的 fit 方法(数组的形状)
- java - 错误:找不到资源样式/Animation.AppCompat.Dialog(又名 com.example.myapplication:style/Animation.AppCompat.Dialog)
- java - 从另一个类调用方法 - 错误:类 Customer 中的构造函数 Customer 不能应用于给定类型
- html - CSS:无法让文本浮动到我的图像右侧
- c++ - 在 CreateProcess 的路径中使用 SHGetKnownFolderPath 来运行程序
- python - 子网掩码范围内的所有 ip
- python - 在 python 中使用 while 循环时遇到问题
- c - 如何在没有头/尾指针的C中将多个节点添加到链表?