【问题标题】:Making an accurate colorbar for a simple plot为简单的绘图制作准确的颜色条
【发布时间】:2014-08-26 00:57:15
【问题描述】:

我正在尝试制作一个简单的绘图(对于这个示例,绘制 y=x^2 的绘图就足够了),我想在给定一些颜色图的情况下根据它们的大小设置点的颜色。

按照我的简单示例说我有:

x = 1:10;
y = x.^2;

使用gscatter(x,y,jet(10)); legend hide; colorbar 生成带有彩色点的图,但颜色条与彩色值不一致。 (无法发布图片,因为这是我的第一篇文章)。使用caxis([1,100]) 命令给出了正确的范围,但颜色仍然关闭。

所以我有两个问题: (1) 如何修复颜色以适应给定范围的颜色条?在我的真实数据中,在某些情况下,我正在查看范围从 -50 到 50 的值,并且有更多的数据点。

(2) 我想用相同的点(但在不同的轴上)创建一个不同的图,并且我希望这个新图上每个点的颜色与前一个图中对应的颜色相同。如何以编程方式从每个点中提取颜色,以便将其绘制在两组不同的轴上?

我只是将这些点移动到一个矩阵中并执行一个imagesc() 命令,但它们不是整数间隔,或者同样简单的缩放也不起作用。

感谢您的帮助!

【问题讨论】:

  • 我发现如果我使用类似于mesh(zeros(3,10),[x;x;x],[y;y;y]); view(90,0) 的东西,我会得到正确的情节并且颜色与条形一致。为什么这行得通,因为我传递了一个 3x3 矩阵,因为网格不会接受向量参数。如何获取每个点的颜色?

标签: matlab plot colorbar colormap


【解决方案1】:

关于您的第一个问题,您需要将 y 值插入到颜色图的线性索引中。比如:

x = 1:10;
y = x.^4;
csize = 128;
cmap = jet(csize);
ind = interp1(linspace(min(y),max(y),csize),1:csize,y,'nearest');
scatter(x,y,14,cmap(ind,:),'filled')
colorbar
caxis([min(y) max(y)])

在这种情况下使用interp1 是大材小用;你可以直接计算。不过,我觉得这样更清楚。

我认为它也回答了你的第二个问题,因为你有每个数据点颜色的索引,所以你可以以同样的方式再次使用它。

【讨论】:

  • 这很有帮助!谢谢!不过,我很难理解您对 interp1 函数的使用。我理解help interp1:X = 0:10; V = sin(X); Xq = 0:.25:10; Vq = interp1(X,V,Xq); plot(X,V,'o',Xq,Vq) 中给出的示例,它只是在每个.25 处填充给定点之间的点。 y,'nearest' 参数在这里有什么作用?另外,我敢肯定,当我使用cmap(ind,:) 时,它会返回一个 10x3 矩阵,它的每一行都是各个点的 RGB 值,对吗?再次感谢!
  • nearest 选项告诉interp1 返回目标网格中最接近的值(interp1 的第二个参数) - 这是因为您必须获得颜色图的有效索引 - 它必须是正确范围内的整数(在我的示例中为 1:128)。关于RGB,你写的是正确的。
猜你喜欢
  • 2019-03-23
  • 1970-01-01
  • 2014-06-28
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 2016-04-11
相关资源
最近更新 更多