【问题标题】:Separate colormap for each subplot in OctaveOctave 中每个子图的单独颜色图
【发布时间】:2017-01-18 22:13:37
【问题描述】:

Matlab 能够为每个子图设置单独的颜色图。与Octave docs 描述的功能相同

即以下短语:

函数文件:cmap = colormap (hax, ...) 如果第一个参数 hax 是坐标区句柄,则查询或设置 hax 的父图形的颜色图。

但是当我尝试运行以下代码时,由于某种原因,我最终会为所有子图使用单一颜色图。

clear -all;
clc;

img = zeros(128, 128);
img(64,64) = 0.2;
rad = radon(img);

x = 1;
y = 4;


s1 = subplot(y,x,1); imagesc(img);
colormap(s1, gray);
s2 = subplot(y,x,2); imagesc(rad);
colormap(s2, hot);
colorbar;

line_img = zeros(128, 128);
line_img(64, 32:64) = 0.5;
line_img(63, 32:64) = 0.4;
line_img(63, 32:64) = 0.2;
line_rad = radon(line_img);
s3 = subplot(y,x,3); imshow(line_img);
colormap(s3, gray);
s4 = subplot(y,x,4); imagesc(line_rad);
colormap(s4, hot);

colorbar;

感谢任何帮助。我希望在“热”中有灰度源图像和氡变换图像。出于某种原因,我得到的第一个子图有点像灰度(实际上不是,因为我用值 0.2 初始化点,而倍频程给我纯白色,而我期待相当深的灰色),剩下的图像似乎设置了“热”颜色图。

【问题讨论】:

  • 文档说如果你传递一个轴句柄,父图形的颜色图就会改变。这与每个轴具有不同的颜色图不同,因为它们都在同一个图中。

标签: matlab plot octave


【解决方案1】:

如果您从文档中仔细阅读该行,您会发现,如果您传递一个轴句柄,则 父图形的 颜色图会发生变化。这与每个轴具有不同的颜色图不同,因为它们都在同一个图中。

函数文件:cmap = colormap (hax, …) 如果第一个参数 hax 是坐标区句柄,则查询或设置 hax 父图形的颜色图

目前,Octave 不支持最近才在 MATLAB 中引入的此功能。

解决此问题的方法是在使用imshow 显示之前将您的图像转换为 RGB 图像,然后图形的颜色图就无关紧要了。您可以先将其转换为索引图像(使用gray2ind),然后使用ind2rgb 转换为RGB。

% To display the grayscale image
rgb = ind2rgb(gray2ind(img), gray);
imshow(rgb);

附带说明,您的第一张灰度图像显示为全白的原因是,如果imshow 的输入类型为double,则所有值都应介于0 和1 之间。如果你想改变这种行为你可以使用imshow的第二个输入来指定你想缩放颜色限制以匹配你的数据

imshow(img, [])

【讨论】:

  • 我的错,对不起。那么,目前还没有实现 matlab 的功能吗?以下是它在 matlab 中的工作方式:'如果您使用的是 MATLAB R2014b 或更高版本,则函数“colormap”接受轴的句柄作为输入,并允许您为每个轴设置不同的颜色图。例如,以下代码 sn-p 将绘制两个具有不同颜色图的子图。 ax1 = 子图(2,1,1);冲浪(峰)颜色图(ax1,弹簧)'
  • @Roman No Octave 没有。 Octave 文档对此非常清楚。您实际上直接粘贴到帖子中的文档。
  • 非常感谢您的帮助。
  • 您可以使用图像包中的subimage,它完全符合您的描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多