声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2205|回复: 11

[绘图技巧] 麻烦帮我改改这个My_bar3的程序【附代码】

[复制链接]
发表于 2013-9-14 14:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
程序的功能是输入一个矩阵,矩阵大小在【0,1】要绘制类似这样的立方图:

bar3

bar3
我的程序直接是从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
   
[m,n]=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!




回复
分享到:

使用道具 举报

发表于 2013-9-15 09:20 | 显示全部楼层
是warning不是错误
 楼主| 发表于 2013-9-15 10:51 | 显示全部楼层
发表于 2013-9-16 00:06 | 显示全部楼层
个人水平有限, 没遇过, 所以没经验
没资料, 所以也没得试/学习
同待有经验的高人路过
 楼主| 发表于 2013-9-16 00:43 | 显示全部楼层
ChaChing 发表于 2013-9-16 00:06
个人水平有限, 没遇过, 所以没经验
没资料, 所以也没得试/学习
同待有经验的高人路过

不管怎样,我要感谢Chaching的热心帮助!上振动联盟,得到了你好多帮助!你是咱们坛友的福气,我们的榜样!
发表于 2013-9-16 15:00 | 显示全部楼层
本帖最后由 ChaChing 于 2013-9-16 15:02 编辑
mxlzhenzhu 发表于 2013-9-16 00:43
不管怎样,我要感谢Chaching的热心帮助!上振动联盟,得到了你好多帮助!你是咱们坛友的福气,我们的榜样! ...

刚使用下式试了下, 没报警! (R2009a)
  1. Y=cool(7); My_bar3(Y,'Yes')
复制代码
确认了我先前的猜测, 这报警应该是输入造成
所以若不知楼主输入, 可能无法知道原因
zzz.jpg




 楼主| 发表于 2013-9-16 17:16 | 显示全部楼层
ChaChing 发表于 2013-9-16 15:00
刚使用下式试了下, 没报警! (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

[m,n]=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

1.jpg

评分

2

查看全部评分

发表于 2013-9-20 23:51 | 显示全部楼层
那天试了下,没试出warning! 改变几次大小也没成
老实话, 没花时间细看LZ的程序
经LS提醒, 才晓得自已试的问题-总是m>n
  1. Y = cool(70); Y=reshape(Y,21,10); My_bar3(Y,'Yes')
  2. Y = cool(70); Y=reshape(Y,10,21); My_bar3(Y,'Yes')
复制代码
第二个会出warning, 第一个因为zdata会resize所以不会
 楼主| 发表于 2013-9-21 16:36 | 显示全部楼层
ChaChing 发表于 2013-9-20 23:51
那天试了下,没试出warning! 改变几次大小也没成
老实话, 没花时间细看LZ的程序
经LS提醒, 才晓得自已试的 ...

ChaChing,我敬礼了!
发表于 2013-9-21 19:03 | 显示全部楼层
mxlzhenzhu 发表于 2013-9-21 16:36
ChaChing,我敬礼了!

不是谢我, 应该谢江树空大侠才对!
个人只不过是没如此用过跟著LZ学习吧了
发表于 2013-9-22 10:00 | 显示全部楼层
ChaChing 发表于 2013-9-21 19:03
不是谢我, 应该谢江树空大侠才对!
个人只不过是没如此用过跟著LZ学习吧了

呵呵,大侠不敢当,愿为各位同仁尽绵薄之力,实际也是向大家学习
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-10 16:49 , Processed in 0.086968 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表