当前位置: 首页>编程语言>正文

Android堆叠柱状图实现 堆叠柱状图怎么画

在之前的文章中,分享了一个Matlab柱状图的绘制模板

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_论文插图,第1张

以及一些特殊形式的柱状图

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_matlab_02,第2张

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_Android堆叠柱状图实现_03,第3张

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_Android堆叠柱状图实现_04,第4张

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_可视化_05,第5张

昨天有朋友问我,类似下面这种多组堆叠图应该怎么画。

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_Android堆叠柱状图实现_06,第6张

我告诉她,之前有类似的教程,稍微举一反三一下,不难画。

但回头转念一想,对于新手来说,其实还是有些难度的。

因为Matlab中并没有现成的所谓“多组堆叠图”,需要根据已有的方法,通过一定形式的变形得到。

这需要打破固有的思维方式,或者说,创新。

像之前分享的气泡矩阵散点图

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_Android堆叠柱状图实现_07,第7张

双轴柱状图

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_Android堆叠柱状图实现_08,第8张

等等,都是这种情况。

所以,这次就单独出一期多组堆叠图的教程

先来看一下成品效果:

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_开发语言_09,第9张

特别提示:Matlab论文插图绘制模板系列,旨在降低大家使用Matlab进行科研绘图的门槛,只需按照模板格式添加相应内容,即可得到满足大部分期刊以及学位论文格式要求的数据插图。如果觉得有用可以分享给你的朋友


模板中最关键的部分内容

1. 数据准备

此部分非常的关键

示例程序中,共有24组数据,每组包括2个堆叠柱子,每根柱子包括4个子单元。

大家可以结合第三部分内容想一下这里变量设置的原因。

% 读取数据
% 自变量
X = 1:72;
X(3:3:72) = [];
% 因变量
Y = [5.5 5.6 8.5 8.7 7.1 7.2
    5.5 5.6 8.5 8.8 7.1 7.3
    3.3 3.1 5.2 4.2 4.1 4.1
    2.6 2.2 5.1 4.1 4.5 4.4];
Y = repmat(Y,1,8);

2. 颜色定义

颜色搭配比较考验个人审美,需要多加尝试,尤其是这种图,很容易显得杂乱

这里我直接用之前分享的addcolorplus工具的渐变色

%% 颜色定义
num = size(Y,1); % 堆叠柱数
idx = linspace(1,64,num*2);
idx = round(idx);
map = addcolorplus(300);
C1 = map(idx(1:4),:); % 第一组颜色
C2 = map(idx(5:8),:); % 第二组颜色

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_matlab_10,第10张

3. 多组堆叠图绘制

使用‘bar’命令,分别绘制未经美化的两组堆叠图

% 第一组
Y1 = zeros(size(Y));
Y1(:,1:2:48) = Y(:,1:2:48);
GO1 =bar(X,Y1',1,'stacked','EdgeColor','k');
hold on
% 第二组
Y2 = zeros(size(Y));
Y2(:,2:2:48) = Y(:,2:2:48);
GO2 =bar(X,Y2',1,'stacked','EdgeColor','k');
hTitle = title('MultiStackBar');
hXLabel = xlabel('XAxis');
hYLabel = ylabel('YAxis');

考虑到配色问题,这里沿用了双轴柱状图的作图思路,构造了两组数据,画了两次堆叠图。

具体可以参考Matlab论文插图模板第4期—双坐标轴柱状图这期内容。

4. 细节优化

为了插图的美观,赋上之前选择好的颜色。

% 赋色
% 第一组的赋色
GO1(1).FaceColor = C1(1,:);
GO1(2).FaceColor = C1(2,:);
GO1(3).FaceColor = C1(3,:);
GO1(4).FaceColor = C1(4,:);
% 第二组的赋色
GO2(1).FaceColor = C2(1,:);
GO2(2).FaceColor = C2(2,:);
GO2(3).FaceColor = C2(3,:);
GO2(4).FaceColor = C2(4,:);

进一步,调整坐标轴、坐标轴刻度及其标签,添加legend,设置字体字号,

% 坐标轴美化
set(gca, 'Box', 'off', ...                                        % 边框
        'XGrid', 'off', 'YGrid', 'on', ...                        % 网格
        'TickDir', 'out', 'TickLength', [.005 .005], ...          % 刻度
        'XMinorTick', 'off', 'YMinorTick', 'off', ...             % 小刻度
        'XColor', [.1 .1 .1],  'YColor',[.1 .1 .1])               % 坐标轴颜色
% 标签及Legend 设置   
hLegend =legend([GO1(1),GO1(2),GO1(3),GO1(4),GO2(1),GO2(2),GO2(3),GO2(4)], ...
                'A1', 'A2', 'A3', 'A4','B1','B2', 'B3', 'B4', ...
                 'Location','eastoutside','Orientation','vertical');
hLegend.ItemTokenSize = [5 5];
legend('boxoff');
% 字体和字号
set(gca, 'FontName', 'Helvetica')
set([hXLabel, hYLabel, hLegend], 'FontName','AvantGarde')
set(gca, 'FontSize', 10)
set([hXLabel, hYLabel, hLegend],'FontSize', 11)
set(hTitle, 'FontSize', 11, 'FontWeight' ,'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])

设置完毕后,按照所需分辨率、格式输出图片。

%% 图片输出
figW = figureWidth;
figH = figureHeight;
set(figureHandle,'PaperUnits',figureUnits);
set(figureHandle,'PaperPosition',[0 0 figWfigH]);
fileout = 'test';
print(figureHandle,[fileout,'.png'],'-r300','-dpng');

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_开发语言_09,第9张

也可以尝试其它配色:

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_开发语言_12,第12张

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_Android堆叠柱状图实现_13,第13张

Android堆叠柱状图实现 堆叠柱状图怎么画,Android堆叠柱状图实现 堆叠柱状图怎么画_论文插图_14,第14张

以上。

完整代码:

多组堆叠图代码


https://www.xamrdz.com/lan/5sw1923059.html

相关文章: