MATLAB 中的堆积条形图
Stacked bar chart in MATLAB
我正在尝试在 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 中有点棘手):
[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
我正在尝试在 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 中有点棘手):
[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