我猜,我在Matlab2013上遇到了色彩问题。我绘制了一个带有色彩图的三维表面图,我想在同一个图中在x-y平面上有一个位图(8位彩色图像)。彼此分开绘制的工作正常,但只要我在一个图中绘制它们,第一个表面图只是黑色。我想这是因为x-y平面上的RGB图像使用不同的颜色图。 Matlab中是否有选项可以在同一个图中绘制两种不同类型的图像?
surf(X,Y,density,'FaceColor','texturemap','Edgecolor','none')
colormap hot
...
%// define the location of the bitmap
xImage = [miX maX; miX maX]; %// The y data for the image corners
yImage = [miY miY; maY maY]; %// The x data for the image corners
zImage = [zDist zDist; zDist zDist]; %// The z data for the image corners
surf(xImage,yImage,zImage,... %// Plot the surface
'CData',RGBImage,...
'FaceColor','texturemap');
谢谢! 都灵
答案 0 :(得分:1)
我认为这是density
和zImage
相对缩放的问题。我可以通过执行以下操作来复制它:
1)绘制一个surf
,其中第三个输入是 n x m ,它被缩放为一些真实数据(例如-0.2到+0.2)。这会响应colormap
中您所期望的变化。
2)在hold on
之后,绘制另一个surf
,其中第三个输入是 nxmx 3 ,就像RGB图像一样,双值在0和1之间缩放。
这会导致第一张图像变为“暗”(或者该特定色彩图中的最低颜色)。问题在于,他们共享CLim
,位于同一轴,尽管RGBImage
实际上没有引用色彩图。
通过缩放/标准化第一个图(您的density
值)介于0和1之间(在这种情况下),这是“可修复的” - 尽管如果您想要这个快速解决方案会给您带来问题添加颜色条。或者,在绘制第一个冲浪后,首先抓住轴上的“CLim”:
trueC = get(gca,'CLim');
然后在绘制图像后将其设置回来:
set(gca,'CLim',trueC)