wj326_0 发表于 2009-7-21 21:48

请问如何给多组bar图设置多种颜色?

例如
a=; bar(a);

出现的是一共4组,每一组四条bar图(每一组的最后两条因为数据很少,所以显得很低),可是都是蓝颜色。(我的问题里是分成四组数据的,这里为了举例简单)

我想每一组的四条bar图按红,绿,黑,蓝四种颜色区分排列,四组都是这样,在网上找了很久可都没有找到方法,我自己的想法是
bar(a(1,1:3:13),'r',a(1,2:3:14),'g',a(1,3:3:15),'k',a(1,4:3:16),'b');   可是不行

请大家帮帮我,谢谢了!
这个可以在程序里实现么,还是说只能在figuar加工中?

[ 本帖最后由 ChaChing 于 2009-7-21 22:36 编辑 ]

ChaChing 发表于 2009-7-21 22:35

第一次画这种图, 刚看看help下
a=1:16; aa=reshape(a,4,4)'; h=bar(aa);
set(h(1),'FaceColor','r'); set(h(2),'FaceColor','g');
set(h(3),'FaceColor','k'); set(h(4),'FaceColor','b');

还有bar画出的图, 好像预设即为不同颜色! (2006ra)

[ 本帖最后由 ChaChing 于 2009-7-21 22:38 编辑 ]

wj326_0 发表于 2009-7-22 16:47

真是非常感谢你的热心帮助,学到了新的东西,我试了一下,可是做出来的图形是被压缩了宽度 ,见test1.jpg
我自己试了两个方法
1。barwidth = 0.8;bar(aa)
      结果是没有变化,同test1.jpg

2。aa=reshape(gesamt,6,4)'; h=bar(aa);
       set(h(1),'FaceColor','r','BarWidth'); set(h(2),'FaceColor','g','BarWidth');
       set(h(3),'FaceColor','k','BarWidth';set(h(4),'FaceColor','b','BarWidth');
      结果见test2.jpg,matlab提示我set命令有错误, 宽度有了变化,可是颜色是我无法控制的,
      同时横坐标上的字样也不是我程序里作的,Sniffer 1, Sniffer 2,Sniffer 3,Sniffer 4
      而且我在程序里还有图例的命令,legend('Data','ACK','RTS','CTS');,也没有体现

可以麻烦你再帮我看看么,谢谢了

[ 本帖最后由 ChaChing 于 2009-7-22 20:38 编辑 ]

friendchj 发表于 2009-7-22 20:22

二楼的方法试了试,正常。我的是matlabR2008a。

把set(h(1),'FaceColor','r','BarWidth');
……
改成
set(h(1),'FaceColor','r','BarWidth',3);
……
试试

[ 本帖最后由 friendchj 于 2009-7-22 20:27 编辑 ]

ChaChing 发表于 2009-7-22 20:49

回复 板凳 wj326_0 的帖子

刚刚又看下help! 请LZ亦仔细看下!
bar(...,width) sets the relative bar width and controls the separation of bars within a group. The default width is 0.8, so if you do not specify x, the bars within a group have a slight separation. If width is 1, the bars within a group touch one another.
还有LZ没给齐相关资讯, 个人无法给出建议!

[ 本帖最后由 ChaChing 于 2009-7-22 20:54 编辑 ]

kjyqcl 发表于 2010-7-31 11:28

原帖由 friendchj 于 2009-7-22 20:22 发表 http://www.chinavib.com/forum/images/common/back.gif
二楼的方法试了试,正常。我的是matlabR2008a。

把set(h(1),'FaceColor','r','BarWidth');
……
改成
set(h(1),'FaceColor','r','BarWidth',3);
……
试试
-------------------------------------------------------------
这个应该是正解---以前在matlab7.0里写过类似的函数引用

另外,好像MATLAB6.5不支持BarWidth属性,我原先用7.0版本写的程序,现在用6.5执行,会报错:
“Invalid patch property: 'BarWidth' ”
我的笔记本没有安装7.0,而且安装的6.5没有帮助,所以一时也搞不清二者对bar函数的支持具体区别有哪些。

kjyqcl 发表于 2010-7-31 11:31

找到如下帮助:
http://www.mathworks.com/access/helpdesk/help/techdoc/creating_plots/f10-19972.html
Overlaying Bar Graphs
In addition to grouping and stacking barseries, you can overlay several bars that share the same baseline and y-range by making each series of bars a different width and plotting the widest ones first. The following example shows how to accomplish this within an axes:

Define x and y data; it probably helps to make spacing of x values constant:

x=;
y1=;
K=0.5;

Plot Series 1 in blue, and set bar width to one-half an x unit:

bar1=bar(x, y1, 'FaceColor', 'b', 'EdgeColor', 'b');
set(bar1,'BarWidth',K);

Define Series 2, and plot it in red over the first series:

hold on;
y2=;
bar2=bar(x, y2, 'FaceColor', 'r', 'EdgeColor', 'r');

Set the width of the second series to half that of the first one:

set(bar2,'BarWidth',K/2);
hold off;
legend('series1','series2')

ChaChing 发表于 2010-7-31 22:51

...好像MATLAB6.5不支持BarWidth属性...
试了下v5.3, 的确不支持BarWidth属性!
但稍微修改下亦可
a=1:16; aa=reshape(a,4,4)'; h=bar(aa,3);
set(h(1),'FaceColor','r'); set(h(2),'FaceColor','g');
set(h(3),'FaceColor','k'); set(h(4),'FaceColor','b');
页: [1]
查看完整版本: 请问如何给多组bar图设置多种颜色?