Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab条形图:更改条形图的颜色以及条形图和轴之间的间距_Matlab_Charts_Bar Chart_Matlab Figure - Fatal编程技术网

Matlab条形图:更改条形图的颜色以及条形图和轴之间的间距

Matlab条形图:更改条形图的颜色以及条形图和轴之间的间距,matlab,charts,bar-chart,matlab-figure,Matlab,Charts,Bar Chart,Matlab Figure,我有一个棘手的问题,我认为不能简单地回答 我有一个大的数据表,想为每2个相应的平均值保存条形图。我已经用“for loop”实现了这一点,但是我不能为我的条设置不同的颜色,也不能在条和轴之间设置适当的空间 这是最简单的例子: k = [2 5] bar(k) Matlab将这些数据[25]视为一个“组”,并没有给出仅改变一个条颜色的可能性 当然,当我们有不同的“组”时,颜色是可变的 y = bar([1 2 3; 4 5 6]); y(2).FaceColor = 'red'; 但是我的例

我有一个棘手的问题,我认为不能简单地回答

我有一个大的数据表,想为每2个相应的平均值保存条形图。我已经用“for loop”实现了这一点,但是我不能为我的条设置不同的颜色,也不能在条和轴之间设置适当的空间

这是最简单的例子:

k = [2 5]
bar(k)

Matlab将这些数据[25]视为一个“组”,并没有给出仅改变一个条颜色的可能性

当然,当我们有不同的“组”时,颜色是可变的

y = bar([1 2 3; 4 5 6]);
y(2).FaceColor = 'red';
但是我的例子呢?我只需要两条,我需要给它们涂上不同的颜色。另外,我想在每个条和轴之间设置一个小的空间(同样,对于两条条条,这并不是那么简单,我不能使用“条宽度”,因为这并不能提供我真正想要的)

有人知道怎么避开这件事吗

谢谢你的回复!
Mary

一个好方法是为每组添加零列:

k = [2 5;0 0];
bar(k,'grouped')
更新 另一种不同颜色的解决方案是使用
栏中的位置:

k = [2 5];
figure(1);
hold on;
h=bar(1,k(1));
set(h,'FaceColor','k');
h=bar(2,k(2));
set(h,'FaceColor','b');
hold off

据我所知,这需要使用自定义条形图,因为Matlab的条形图使用动态彩色贴图。就个人而言,我喜欢用于所有这些定制的GRAMM工具箱:

下面是一个例子:


这里有一个解决此问题的选项。您可以使用
diag(k)
创建一个2*2矩阵,该矩阵包含除主对角线之外的所有零,主对角线将包含您的值,并且Matlab将其作为两个不同的组进行读取。然后,将“虚拟”条的扩展数据更改为
nan
,这样Matlab将忽略它

k = [2 5];
b = bar(diag(k));
set(b,{'XData'},{[1 nan],[nan 1]}); % remove the group you don't want
set(gca,{'xticklabel','XTick'},{{'ONE','TWO'},[0.85 1.15]});
b(2).FaceColor = 'r'; % choose a different color
结果是:

如果你想把它推广到更多的群体(这里是5个):

你会得到:

最后,如果希望它们“悬停”在x轴上方一点,可以添加以下行:

b(1).BaseLine.Color = 'none'; % remove the base line
ylim([-0.1 max(k(:))]) % shift the bars up a little
并获得:

该功能是一个可轻松处理间距和x轴标签的选项,但您必须单独绘制每个条以独立控制颜色:

k = [2 5];
histogram('Categories', {'ONE'}, 'BinCounts', k(1), 'BarWidth', 0.8, ...
          'FaceAlpha', 1, 'FaceColor', [0 0.4470 0.7410]);
hold on;
histogram('Categories', {'TWO'}, 'BinCounts', k(2), 'BarWidth', 0.8, ...
          'FaceAlpha', 1, 'FaceColor', [0.8500 0.3250 0.0980]);

Hmm,这不是一个好的解决方案,因为在右边第二个空白处的情节看起来很奇怪。而且,这对我来说很重要,因为我为我的条设置了名称[[像这样:k=[2 5;0 0];条(k,'grouped');集(gca,'xticklabel',{'1','2'};])。所以你的解决方案也会毁了它。谢谢你的尝试:)。致以最良好的祝愿@你可以根据更新来更改颜色。虽然,它们不在同一列中。你说的轴间距是什么意思?哪个轴?x、 还是两者兼而有之?
b(1).BaseLine.Color = 'none'; % remove the base line
ylim([-0.1 max(k(:))]) % shift the bars up a little
k = [2 5];
histogram('Categories', {'ONE'}, 'BinCounts', k(1), 'BarWidth', 0.8, ...
          'FaceAlpha', 1, 'FaceColor', [0 0.4470 0.7410]);
hold on;
histogram('Categories', {'TWO'}, 'BinCounts', k(2), 'BarWidth', 0.8, ...
          'FaceAlpha', 1, 'FaceColor', [0.8500 0.3250 0.0980]);