【问题标题】:Octave - Plotting RectanglesOctave - 绘制矩形
【发布时间】:2016-10-23 11:32:42
【问题描述】:

我想制作一个有点像散点图但带有矩形的图。每个矩形都需要具有特定的大小和由坐标确定的起始位置。我能得到的都是。

然而,我想做的是用另一个值 z 为每个矩形着色。但是我不知道该怎么做。

您可以使用下面的代码查看我正在尝试的内容。

x=rand(1,10)*10;
y=rand(1,10)*10;
w=rand(1,10)*5;
h=rand(1,10)*20;
axis([0 10 0 20]);

for i=1:10
rectangle('Position',[x(i) y(i) w(i) h(i)])
endfor

这会产生附加的图表

编辑:我知道“FaceColor”和“EdgeColor”属性,但是如果我有很多矩形......比如说100个左右,并且我想用相应的z值为每个矩形着色,我似乎无法做到让这些属性接受 Z 值数组。

【问题讨论】:

  • 阅读the documentation'FaceColor''EdgeColor' 属性已明确记录...
  • 是的,我了解“FaceColor”和“EdgeColor”......这些属性允许我通过输入 RGB 三元组来着色......但是如果我有一百个矩形要着色怎么办。 ...我可以使用带有 Z 值数组的 FaceColor ....它似乎不起作用。
  • 然后将 Z 值映射到 RGB 三元组。
  • StackOverflow 不是代码编写服务。在期望别人努力之前先尝试付出一些努力。
  • colormap lines 可能有用。更好的方法是使用glasbey colormap,但这不在 Octave 中,但您可以自己轻松制作。只需将颜色复制到矩阵中,然后将 RGB 重新缩放到 [0 1] 范围。

标签: octave


【解决方案1】:
x=rand(1,10)*10;
y=rand(1,10)*10;
w=rand(1,10)*5;
h=rand(1,10)*20;
z=randi(10,1,10)/10;
axis([0 10 0 20]);

for i=1:10

cm=colormap; 
colorID=max(1, sum(z(i)>[0:1/length(cm(:,1)):1]));
myColor=cm(colorID,:);

rectangle('Position',[x(i) y(i) w(i) h(i)],'EdgeColor',myColor)

endfor

【讨论】:

  • 生成视觉上不同的颜色is not a trivial problem,这就是为什么真正理解其背后的过程很重要。如果颜色图中的矩形多于颜色,则此方法不起作用。既然你已经表明你有 100 个矩形,那么你就在这个领域中。
  • 刚看到这个帖子,发现已经3岁了。正在寻找类似的答案。但是为什么有人会像他们在这里一样标记合理的问题和建议的答案,而没有任何解释呢?这样做的病人会导致堆栈溢出成为回声室。
猜你喜欢
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2013-08-26
  • 1970-01-01
相关资源
最近更新 更多