首页 > 解决方案 > 将列值添加到八度条形图

问题描述

我正在我的 OCTAVE 应用程序中制作新的条形图。由于读数更好,我想为每个条添加实际值。每个条柱的实际值应位于高 Y=50% 上,并与每个条柱居中。我在 google 上进行了搜索,但我没有在 bar 列上找到任何真实的值示例。

我的例子是用油漆做的,应该怎么看: 在此处输入图像描述

上图是一个应该如何看待的示例 - 例如,每个条形列都有红色值。

此条形图的绘制代码:

subplot(5, 1, 5);
y2 = [data1; data2; data3; data4];
x = [1 ,2 ,3, 4];
labels = ["DATANAME1"; "DATANAME2"; "DATANAME3"; "DATANAME4"];
bar (x, y2, 0.5, 'facecolor', [0, 0.5, 1]);
set(gca, 'xticklabel', labels);  
title("Something [%]");
xlabel('XLABEL');
ylabel("%");

标签: plotbar-chartoctave

解决方案


您可以使用该text命令将任何文本放在/覆盖任何图上。

这是我的建议,我稍微修改了您的代码:

% Data
x = [1, 2, 3, 4];
y2 = [2; 52; 3; 43];

% Original plot
bar(x, y2, 0.5, 'FaceColor', [0, 0.5, 1]);
labels = ['DATANAME1'; 'DATANAME2'; 'DATANAME3'; 'DATANAME4'];
set(gca, 'XTickLabel', labels);  
title('Something [%]');
xlabel('XLABEL');
ylabel('%');

% Additional plot
y = max(y2) / 2;              % "located on the high Y=50%"
values = [num2str(y2) repelem(' %', 4, 1)];
text( x - 0.1, ...            % x values to put text (some negative displacement for "centrally centered with each bar column")
      repelem(y, 4, 1), ...   % y values to put text (four times y)
      values, ...             % Actual values as text plus "%" to put
      'Color', 'r', ...       % Red text
      'FontWeight', 'bold');  % Bold text

然后输出如下所示:

输出

我使用的是 Octave 5.1.0,该repelem命令在 Octave 5.x 之前可能不可用,但有替代方法可以实现repelem

请注意,values(仅)的构造有效,因为y2它是一个列向量。否则,将“%”添加到每个值y2可能会更复杂一些。

希望有帮助!


推荐阅读