gpt4 book ai didi

matlab - 我如何获得具有函数 bar3 和每个条的不同宽度的条?

转载 作者:太空宇宙 更新时间:2023-11-03 19:15:02 25 4
gpt4 key购买 nike

我有代码:

values = [1.0 0.6 0.1;  0.0 1.0 0.3;  0.9 0.4 1.0];
h = bar3(values);
shading interp
for i = 1:length(h)
% Get the ZData matrix of the current group
zdata = get(h(i),'Zdata');
set(h(i),'Cdata',zdata)
end
set(h,'EdgeColor','k')
view(-61, 68);
colormap cool
colorbar

这张图是这样的:

enter image description here

我想根据栏的高度为每个栏获得不同的宽度。

我想要的看起来像http://www.sdtools.com/help/ii_mac.html中的图片.

blah http://www.sdtools.com/help/mac.gif

最佳答案

这有点难理解,但是一旦你掌握了规律就很容易了。每个 h(i)'XData''YData' 属性是定义每个条形的 x 和 y 宽度的矩阵.这些矩阵的每组 6 行定义一个条。所以诀窍是根据修改'XData''YData'

values = [1.0 0.6 0.1;  0.0 1.0 0.3;  0.9 0.4 1.0];
h = bar3(values);
m = max(values(:))*2; %// normalizing constant for bar width
shading interp
for i = 1:length(h)
% Get the ZData matrix of the current group
xdata = get(h(i),'Xdata');
ydata = get(h(i),'Ydata');
zdata = get(h(i),'Zdata');
set(h(i),'Cdata',zdata)
for k = 1:6:size(xdata,1)
xdatak = xdata(k+(0:5),:);
xdatak = round(xdatak)+sign(xdatak-round(xdatak))*values(ceil(k/6),i)/m;
xdata(k+(0:5),:) = xdatak;
ydatak = ydata(k+(0:5),:);
ydatak = round(ydatak)+sign(ydatak-round(ydatak))*values(ceil(k/6),i)/m;
ydata(k+(0:5),:) = ydatak;
end
set(h(i),'XData',xdata);
set(h(i),'YData',ydata);
end
set(h,'EdgeColor','k')
view(-61, 68);
colormap cool
colorbar

enter image description here

请注意,上面的代码根据 缩放线性 大小(宽度)。要缩放区域,只需使用的平方根:

values = [1.0 0.6 0.1;  0.0 1.0 0.3;  0.9 0.4 1.0];
h = bar3(values);
svalues= sqrt(values);
m = max(svalues(:))*2; %// normalizing constant for bar width
shading interp
for i = 1:length(h)
% Get the ZData matrix of the current group
xdata = get(h(i),'Xdata');
ydata = get(h(i),'Ydata');
zdata = get(h(i),'Zdata');
set(h(i),'Cdata',zdata)
for k = 1:6:size(xdata,1)
xdatak = xdata(k+(0:5),:);
xdatak = round(xdatak)+sign(xdatak-round(xdatak))*svalues(ceil(k/6),i)/m;
xdata(k+(0:5),:) = xdatak;
ydatak = ydata(k+(0:5),:);
ydatak = round(ydatak)+sign(ydatak-round(ydatak))*svalues(ceil(k/6),i)/m;
ydata(k+(0:5),:) = ydatak;
end
set(h(i),'XData',xdata);
set(h(i),'YData',ydata);
end
set(h,'EdgeColor','k')
view(-61, 68);
colormap cool
colorbar

在上述任一情况下,如果您希望所有条形高度相同,只需将第二行替换为

h = bar3(ones(size(values)));

或者,如果您更喜欢 2D View ,请使用

view(-90,90) %// view from above
axis equal %// set the same scale in x and y

enter image description here

关于matlab - 我如何获得具有函数 bar3 和每个条的不同宽度的条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com