在matlab中为曲面图绘制颜色图

时间:2017-02-13 21:22:44

标签: matlab matlab-figure

colorbar;
colormap hot;
x = colorbar;
caxis([-450,-100]);
x = set(x,'YTick',-450:25:-100);
ax = gca;
ax.XAxis.Label.String='x';
ax.YAxis.Label.String='y';
set(gca,'YTick',[0 5 10 15 20 25 30 35 40 45 50 55 60]);
set(gca,'XTick',[0 5 10 15 20])
set(gcf,'Color','cyan');

我正在尝试改善下面所示表面的颜色。我该如何调整步骤?使用caxis([-450,-100])会使步骤线性等于100。如何在曲面图上获得平滑的颜色?我一直在互联网上阅读它,但我不能这样做,所以我问。谢谢。

Refine color on surface with the colormap

1 个答案:

答案 0 :(得分:0)

这些参数可以帮助您获得更平滑的情节:

  • colormap中的颜色数
  • 表面数
  • 表面如何着色

这是一个简单的演示,显示每个参数如何影响生成的图:

f = @(mnp, n, facecolor){ subplot(mnp); ...
    surf(peaks(n), 'edgecolor', 'none', ...
    'facecolor', facecolor); view(2); ...
    title(sprintf('Grid: %d x %d, FaceColor: %s', n, n, facecolor)); ...
    colorbar};
f(221, 15, 'flat');
f(222, 15, 'interp');
f(223, 40, 'flat');
f(224, 40, 'interp');
colormap(jet(10))
figure
f(221, 15, 'flat');
f(222, 15, 'interp');
f(223, 40, 'flat');
f(224, 40, 'interp');
colormap(jet(100))

这是输出:

hash table

Colormap中的颜色数

你已经知道:

  

色彩图的大小决定了色彩之间过渡的平滑程度。具有少量颜色的色彩图在颜色之间具有明显的过渡。较大的色彩映射可以在颜色之间提供更平滑的过渡。

但它可能不会对你的情况做出任何改变,所以继续阅读。

表面数

正如您在上面的示例代码中所看到的,绘制了两个不同数量的曲面的绘图。在第一行和第三行中绘制了15 by 15曲面的网格,而在第二行和第四行中有40 by 40曲面(enter image description here)。您的数据似乎是5 by 13值矩阵。如果你有一个在每个(x,y)上给出z值的函数,尝试绘制更多曲面。

表面如何着色

您可以看到第一列和第二列之间的差异。这就是表面对象more information about peaks(n)改变外观的方式。

  

'flat' - 使用统一的面部颜色。使用CData值。第一个顶点的颜色数据决定了整个面的颜色。

     

'interp' - 插入面部颜色。每个顶点的CData值的双线性插值决定了颜色。

如果没有生成更多曲面的函数并且颜色的线性插值是不够的怎么办?

您可以使用the FaceColor property功能生成更多积分。这是一个示例:

% original data (7 by 7)
[X,Y] = meshgrid(-3:3);
Z = peaks(X,Y);

% cubic interpolation of original data(61 by 61)
[XI,YI] = meshgrid(-3:.1:3);
ZI = interp2(X,Y,Z,XI,YI,'cubic');

% plot data (both original and interpolated)
subplot(121);
surf(X, Y, Z, 'edgecolor', 'none'); 
view(2);axis square
subplot(122);
surf(XI, YI, ZI, 'edgecolor', 'none', 'facecolor', 'interp'); 
view(2);axis square
colormap(hot(300))

结果:

interp2