MATLAB绘制各式柱状图
1 分组绘制柱状图
1.1 案例1:常规分组柱状图
绘制分组数据,并对
数据格式和边框
等进行设置,成图如下所示:
MATLAB绘制代码如下:
clc
close all
clear
%% 导入数据
pathFigure= '.\Figures\' ;
Name = ["生活","生态","工业","农业","汇总"];
xLables = ['Ⅰ' ; 'Ⅱ'; 'Ⅲ'];
mycolor = [53,42,134;
21,132,212;
55,184,156;
215,186,84;
247,250,13]./255;
x = [1 2 3];
XX = [0 0 0 3.92 2.78
0 0 0 6.63 4.2
0.78 8.37 9.98 22.15 15.46];
figure(1);
hold on;
box on;
h = bar( XX ,'FaceColor','flat');
for k = 1:size(XX,2)
h(k).FaceColor = mycolor(k,:);
end
set(gca,'XTick', x , 'XTickLabel',xLables);
set(gca,'FontSize',12,'Fontname', 'Times New Roman');
xlabel("情景",'FontName','宋体','FontSize',14,'Fontweight','bold'); % 后续调整坐标标题
ylabel("\fontname{宋体}\fontsize{15}缺水率(\fontname{Times New Roman}\fontsize{15}%\fontname{宋体}\fontsize{15})",'FontSize',14,'Fontweight','bold'); % 后续调整坐标标题
hl = legend( Name );
set(hl,'Box','off','location','NorthWest','NumColumns',1,'FontSize',12,'FontName','宋体');
ax1 = gca;
ax1.FontSize = 12;
ax1.LineWidth = 1;
set(gca,'Layer','top');
str= strcat(pathFigure, "Figure1", '.tiff');
print(gcf, '-dtiff', '-r600', str);
2 绘制渐变柱状图
看论文时,被这种图深深吸引了,如果想要在MATLAB中绘制以下图形,应当如何实现呢?
图源:J2022-Observed decrease in light precipitation in part due to urbanization-Scientific Reports
2.1 案例
经过多方学习、尝试后发现,MATLAB实现该过程实属困难,但
Origin
可以实现,以如下案例为代表,简要演示如何绘图:
1、数据准备
将如下数据输入Origin新建表格Book中,并将B设置为X2
adc ba 0.52
adc ab 0.25
adc ac 0.8
cda aa 0.33
cda bb 0.48
cda cc 0.53
bbc ca 0.15
bbc cb 0.66
bbc cd 0.88
then,分别将A、B两列设置为列
2、绘制多因子柱状图
选中所有数据,点击绘图-
多因子分组柱状图
在【数据列】部分选取C,在子组列部分选取both A and B,then 确定,便得到初步图形
3、加工美化
(先删除了图例,太丑了,看见恶心),以adc组为例展示
按住ctrl后并点击鼠标左键便可选中第一个柱子,双击进入编辑界面
做如下编辑
同理调整ab,ac两根柱子,至此,adc柱状图颜色已调整好,然后添加误差棒
选中图形,然后点击左上角插入-误差棒,单击图中误差棒便可调整颜色及粗细
finally,添加直线以区分组别,选中图形,点击插入-直线,填写位置即可(可以随便填写然后拖动,也可以仔细确定-一步到位),然后单击直线,调整宽度、颜色、形状等
其他字体、柱子宽度、误差棒数据选择等可自行调整、十分简单
3 绘制多组柱状图并修改文字颜色一致
图源:J2022-Observed decrease in light precipitation in part due to urbanization-Scientific Reports
3.1 案例
4 绘制双轴-倒立柱状图
成图如下:
MATLAB代码如下:
clc
close all
clear
%% 导入数据
pathFigure= '.\Figures\' ;
X = randn(40,1);
Ymax = 50;
Y = Ymax*randn(40,1);
%% 开始绘图
figure(1)
hold on;box on;grid off;
h(3) = area( X,'FaceColor', [0.5529,0.7137,0.8039] ,'LineStyle','none');
[AX,h(1),h(2)] = plotyy( 1:length(X), X, 1:length(X) , Y, 'plot','bar'); % 画双轴,AX(1)左轴,AX(2)右轴,H为曲线本身
set(AX(2),'YDir','reverse','Ylim',[0, Ymax*3 ],'YTick',[0:20:Ymax*2],'FontSize',12,'Fontname', 'Times New Roman'); % 设置右边轴为倒立
set(gca,'box','off','Ytick',[])
set(AX(1),'YLim',[min(X)*1.5,1.5*max(X)],'YTick',[floor(min(X)*1.5):1:ceil(1.5*max(X)) ],'Fontsize',10,'YColor','k');
%设置坐标轴的标题
h(5) = plot( zeros( length(X) ,1) ,'k-','linewidth',0.75);
set(get(AX(1),'Xlabel'),'String','XLabel','Fontname', 'Times New Roman');
set(get(AX(1),'Ylabel'),'String','YLabel1','Fontname', 'Times New Roman');
set(get(AX(2),'Ylabel'),'string','YLabel2','LineStyle','none','Fontname', 'Times New Roman');
set(gca,'Layer','top','FontSize',12,'Fontname', 'Times New Roman');
str= strcat(pathFigure, "Figure 1", '.jpg');
print(gcf, '-djpeg', '-r600', str);
5 绘制区间位置柱状图
区间范围柱状图
是柱状图的一种,能够更加清晰地展示各类目数据区间范围分布的差异。支持通过获取数据的
最小值和最大值
之间的范围,展示不同类目下柱图的数据样式。 如下图所示:
图源:J2022-Amplification of non-stationary drought to heatwave duration and intensity in eastern China Spatiotemporal pattern and causes
参考