找回密码
 注册
Simdroid-非首页
查看: 121|回复: 1

Matlab中怎样画这样复杂的柱状图??

[复制链接]
发表于 2013-6-9 15:21:19 | 显示全部楼层 |阅读模式 来自 吉林长春

17 分钟前 上传
下载附件 (97.5 KB)




bone
cartilage
0.5
97.9916
0
1
98.8735
0
2.5
86.232
13.6252
5
39.6524
60.3476
bone
cartilage
0.5
69.3858
12.9519
1
75.6398
12.9519
2.5
71.6691
22.3528
5
58.1054
37.7719
bone
cartilage
0.5
99.9521
0
1
99.9581
0
2.5
78.7006
21.2575
5
59.3743
40.5838
bone
cartilage
0.5
99.2139
0
1
99.2268
0
2.5
81.8138
17.413
5
60.6121
38.6147
如图所示:我想解决的问题是:1.把这四种工况的数据分成4组显示:即0.5这一组有4个柱子,1这组也是4个柱子......每一组的柱子之间没有空隙,而组与组的柱子之间    是有空隙的
                                                 2.每个柱子都是堆叠图,堆叠的上下两部分用不同的图案来表示。并添加标签:如图上的cartilage和bone
                                                 3.X轴只显示0.5,1,2.5,5这样4个数据
                                                 4.每一种工况都用图例标签显示出来

发表于 2013-6-14 14:18:47 | 显示全部楼层 来自 北京
Simdroid开发平台
  1. function mybargroup(d)
  2. %%
  3. %{
  4. d =

  5.     0.5000   97.9916         0
  6.     1.0000   98.8735         0
  7.     2.5000   86.2320   13.6252
  8.     5.0000   39.6524   60.3476
  9.     0.5000   69.3858   12.9519
  10.     1.0000   75.6398   12.9519
  11.     2.5000   71.6691   22.3528
  12.     5.0000   58.1054   37.7719
  13.     0.5000   99.9521         0
  14.     1.0000   99.9581         0
  15.     2.5000   78.7006   21.2575
  16.     5.0000   59.3743   40.5838
  17.     0.5000   99.2139         0
  18.     1.0000   99.2268         0
  19.     2.5000   81.8138   17.4130
  20.     5.0000   60.6121   38.6147
  21. %}
  22. [~,i]=sort(d)
  23. data=d(i(:,1),:)
  24. x=sum(data(:,1)==data(1))
  25. xdata=1:x*(x+1);
  26. xtick=mean(reshape(xdata,x+1,[]));
  27. xdata(x+1:x+1:end)=[];
  28. xdata=reshape(repmat([xdata;xdata+1;xdata+1;xdata]',1,2)',4,[])'
  29. ydata=reshape([zeros(length(data(:,1)),2),repmat(data(:,2),1,2),...
  30.     repmat(data(:,2),1,2) repmat(data(:,2),1,2)+repmat(data(:,3),1,2)]',4,[])'
  31. cdata=repmat(colormap(jet(2*x)),x,1)
  32. arrayfun(@(i)patch(xdata(i,:),ydata(i,:),cdata(i,:)),1:size(xdata,1))
  33. set(gca,'xtick',xtick,'xticklabel',unique(data(:,1)))
  34. axis tight
  35. box on
  36. grid on
  37. h=colorbar
  38. set(h,'ytick',linspace(1/(4*x),1-1/(4*x),2*x),'yticklabel',1:2*x)

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

点评

好人呀。  发表于 2013-6-19 09:16
matlab中的bar图不能完成你的初衷,改用patch画一个就行,至于legend有点丑,也可以利用patch来生成,colorbar 也是一个选择。colormap可以随意改  发表于 2013-6-14 14:21

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 08:41 , Processed in 0.036678 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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