mxlzhenzhu 发表于 2013-9-14 14:51

麻烦帮我改改这个My_bar3的程序【附代码】

程序的功能是输入一个矩阵,矩阵大小在【0,1】要绘制类似这样的立方图:
我的程序直接是从Matlab里面拷出来的,不好使,经常有这样的错误:Warning: size(CData) must equal size(ZData) or size(ZData)-1 for flat shading
Warning: size(CData) must equal size(ZData) or size(ZData)-1 for flat shading
Warning: size(CData) must equal size(ZData) or size(ZData)-1 for flat shading
Warning: size(CData) must equal size(ZData) or size(ZData)-1 for flat shading
Warning: size(CData) must equal size(ZData) or size(ZData)-1 for flat shading
Warning: size(CData) must equal size(ZData) or size(ZData)-1 for flat shading
Warning: size(CData) must equal size(ZData) or size(ZData)-1 for flat shading
源代码:%=======================================function Success=My_bar3(Z,varargin)
%% function to draw bar3, from matlab codes.
% format: Success=My_bar3(Z,'Yes');% format:Success=My_bar(Z);
%% if nargin==1
    Request_Shading='No';
else
    Request_Shading=varargin{1};
end
   
=size(Z);
h = bar3(Z);
for i = 1:length(h)
    zdata = ones(6*length(h),4);
    k = 1;
    for j = 0:6:(6*m-6)
      zdata(j+1:j+6,:) = Z(k,i);
      k = k+1;
    end
    set(h(i),'Cdata',zdata)
end
colormap cool
colorbar
if strcmp(Request_Shading,'Yes')
    shading interp
    for i = 1:length(h)
      zdata = get(h(i),'Zdata');
      set(h(i),'Cdata',zdata)
      set(h,'EdgeColor','k')
    end
end
Success='Yes';
end
%=======================================
So many thanks!



chybeyond 发表于 2013-9-15 09:20

是warning不是错误

mxlzhenzhu 发表于 2013-9-15 10:51

chybeyond 发表于 2013-9-15 09:20 static/image/common/back.gif
是warning不是错误

可是出了warning就没有结果。

ChaChing 发表于 2013-9-16 00:06

个人水平有限, 没遇过, 所以没经验
没资料, 所以也没得试/学习
同待有经验的高人路过

mxlzhenzhu 发表于 2013-9-16 00:43

ChaChing 发表于 2013-9-16 00:06 static/image/common/back.gif
个人水平有限, 没遇过, 所以没经验
没资料, 所以也没得试/学习
同待有经验的高人路过

不管怎样,我要感谢Chaching的热心帮助!上振动联盟,得到了你好多帮助!你是咱们坛友的福气,我们的榜样!

ChaChing 发表于 2013-9-16 15:00

本帖最后由 ChaChing 于 2013-9-16 15:02 编辑

mxlzhenzhu 发表于 2013-9-16 00:43 http://forum.chinavib.com/static/image/common/back.gif
不管怎样,我要感谢Chaching的热心帮助!上振动联盟,得到了你好多帮助!你是咱们坛友的福气,我们的榜样! ...
刚使用下式试了下, 没报警! (R2009a)
Y=cool(7); My_bar3(Y,'Yes')
确认了我先前的猜测, 这报警应该是输入造成
所以若不知楼主输入, 可能无法知道原因





mxlzhenzhu 发表于 2013-9-16 17:16

ChaChing 发表于 2013-9-16 15:00 static/image/common/back.gif
刚使用下式试了下, 没报警! (R2009a)
确认了我先前的猜测, 这报警应该是输入造成
所以若不知楼主输入,...

有的时候会报警;你尝试改变矩阵M X N的大小就知道了。

江树空 发表于 2013-9-18 11:26

经调试,发现你初始化zdata时其纬度搞错了,给你修改后,无任何警告了。修改后代码如下所示:function Success=My_bar3(Z,varargin)
%% function to draw bar3, from matlab codes.
% format: Success=My_bar3(Z,'Yes');
% format:Success=My_bar(Z);
%%
if nargin==1
    Request_Shading='No';
else
    Request_Shading=varargin{1};
end

=size(Z);

h = bar3(Z);
for i = 1:length(h)
    zdata = ones(6*m,4);    %你原来的是zdata = ones(6*length(h),4),实际length(h)是和n相等的;
    k = 1;
    for j = 0:6:(6*m-6)
      zdata(j+1:j+6,:) = Z(k,i);
      k = k+1;
    end
    set(h(i),'Cdata',zdata)
end
colormap cool
colorbar

if strcmp(Request_Shading,'Yes')
    shading interp
    for i = 1:length(h)
      zdata = get(h(i),'Zdata');
      set(h(i),'Cdata',zdata)
      set(h,'EdgeColor','k')
    end
end
Success='Yes';
end

ChaChing 发表于 2013-9-20 23:51

那天试了下,没试出warning! 改变几次大小也没成
老实话, 没花时间细看LZ的程序
经LS提醒, 才晓得自已试的问题-总是m>nY = cool(70); Y=reshape(Y,21,10); My_bar3(Y,'Yes')
Y = cool(70); Y=reshape(Y,10,21); My_bar3(Y,'Yes')第二个会出warning, 第一个因为zdata会resize所以不会

mxlzhenzhu 发表于 2013-9-21 16:36

ChaChing 发表于 2013-9-20 23:51 static/image/common/back.gif
那天试了下,没试出warning! 改变几次大小也没成
老实话, 没花时间细看LZ的程序
经LS提醒, 才晓得自已试的 ...

ChaChing,我敬礼了!

ChaChing 发表于 2013-9-21 19:03

mxlzhenzhu 发表于 2013-9-21 16:36 static/image/common/back.gif
ChaChing,我敬礼了!

不是谢我, 应该谢江树空大侠才对!
个人只不过是没如此用过跟著LZ学习吧了

江树空 发表于 2013-9-22 10:00

ChaChing 发表于 2013-9-21 19:03 static/image/common/back.gif
不是谢我, 应该谢江树空大侠才对!
个人只不过是没如此用过跟著LZ学习吧了

呵呵,大侠不敢当,愿为各位同仁尽绵薄之力,实际也是向大家学习
页: [1]
查看完整版本: 麻烦帮我改改这个My_bar3的程序【附代码】