在具有循环重复宽度的条形图中绘制水平条

Draw horizontal bars in a bar graph with circularly repeating widths

为了尝试绘制这个图,我使用的代码是:

figure; 
axis equal;
axis([0 100 0 100]); 

 for i = 0:10:90
 rectangle('position',[0 i (i+10) 10], 'facecolor', 0.5+zeros(1,3));
 end

使用此代码,步长会不断增加,并且当 i = 50 时不会 return 到 10。如何使用这个 for 将步长保持在 10 到 50 的范围内环形?

还不错!只需在 rectangle 调用中添加 mod 语句:

figure; 
axis equal;
axis([0 100 0 100]); 

for i = 0:10:90
    rectangle('position',[0 i mod(i,50)+10 10], 'facecolor', 0.5+zeros(1,3));
end

我们注意到您的循环从 0 到 90,步长为 10。mod 语句所做的是,一旦超过 50,它就允许回绕。因此,在 i = 0 ,做 mod(0,50) 给我们 0,我们需要加 10,这样你的初始宽度是 10。接下来在 i = 10,做 mod(10,50) + 10 给我们 20,我们继续直到 i = 40,我们的宽度为 50。接下来在 i = 50,我们应该将宽度重置为 10 和 mod(50,50) = 0,因为没有余数。从图表的外观来看,一旦宽度达到 50,您希望将其重置为 10 的宽度,这就是 mod 运算符的用途。

这是我得到的: