【问题标题】:Stacked bar chart in MATLABMATLAB中的堆积条形图
【发布时间】:2019-04-10 08:20:22
【问题描述】:

我正在尝试在 MATLAB 中创建一个条形图,其中条形位置在一列中,条形高度在另一列中,并且每当两个或多个位置重叠时,条形就会堆叠。

为了说明,这是在 R 中使用 ggplot 创建的相同图表:

library(ggplot2)

data <- data.frame(name=c('A', 'B', 'C', 'D', 'E', 'F'),
                   pos=c(0.1, 0.2, 0.2, 0.7, 0.7, 0.9),
                   height=c(2, 4, 1, 3, 2, 1))

ggplot(data, aes(x=pos, y=height, fill=name)) +
  geom_bar(stat='identity', width=0.05)

为了比较,在 MATLAB 中,相同的数据如下所示:

data = [ 0.1, 0.2, 0.2, 0.7, 0.7, 0.9; ... 
    2, 4, 1, 3, 2, 1]';

但我不知道是否有 bar 函数的参数组合来创建相同类型的堆叠条形图。

【问题讨论】:

标签: matlab bar-chart stacked-chart


【解决方案1】:

这是实现此目的的一种方法(在 MATLAB 中有点棘手):

[binCenters, ~, binIndex] = unique(data(:,1));
nBins = numel(binCenters);
nBars = numel(binIndex);
barData = zeros(nBins, nBars);
barData(binIndex+nBins.*(0:(nBars-1)).') = data(:, 2);
bar(binCenters, barData, 'stacked');
legend('A', 'B', 'C', 'D', 'E', 'F');


关键是将传递给bar 的数据格式化为矩阵,使得每一行包含一个堆栈的值,并且每一列将是具有不同颜色的不同分组。基本上,barData 最终大部分为零,每列有一个非零值:

barData =

     2     0     0     0     0     0
     0     4     1     0     0     0
     0     0     0     3     2     0
     0     0     0     0     0     1

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2017-10-14
    • 2017-02-26
    • 1970-01-01
    • 2020-05-27
    • 2014-02-09
    • 2020-09-14
    相关资源
    最近更新 更多