来源
近期处理实验数据,采集一些离散点,想按自变量分组, 对数据进行分析,即绘制直方图
直方图绘制方法
histogram(X)
具体详情查matlab帮助文档
x = randn(10000,1);
h = histogram(x)
bar(y)
我看中了用 bar
函数绘制直方图,
目标,实现
改x坐标
实际是设置Axes属性,查帮助,设置XTickLabel
。
ax = gca;
ax.XTick = 1: 5;
ax.XTickLabel = {‘a’, 'b', 'c', 'd', 'e'};
ax.XTickLabelRotation = 45;
如果遇到绘制出来的 bar 图不是每个bar都有横坐标, 就先设置XTick
在更改
画带均值和方差的直方图
这个误差体现在上面每个bar上面的直线部分
使用函数barwitherr
或者errorbar(官方自带)
修改bar颜色
直接设置color属性FaceColor,但是每个bar都不同颜色没试过,不清楚
其他
像这只x轴y轴标题图例等常规操作,此处不予讨论,查matlab手册即可。
我的实例
width = 10; % 设置每段bar数据跨度
range = 160; % 总共数据跨度
StartBarMid = -80 + 0.5 * width ;
dataX = XX; % 实验数据赋值,为了修改数据不用后面一个一个改变量
dataY = Y;
label(1) = {[' ']};
%收据处理,实验数据存储在变量dataX和dataY中,并对dataX分段
for i = 1: range/width
index = find( dataX > StartBarMid-0.5*width + width*(i-1) ...
& dataX < StartBarMid+0.5*width + width*(i-1));
barCenter(i)= StartBarMid+width*(i-1);
tiltAng(i) = mean( dataY(index) );
variance(i) = var(dataY(index), 1); % 方差,这里设为1是用方差定义公式(分母N),这个函数默认分母(N-1)
Stadevi(i) = std(dataY(index), 1); % 标准差
angle2D(i) = StartBarMid + width*(i-1);
% 生成横坐标的内容
label(i) = { [ '[', num2str(StartBarMid-0.5*width + width*(i-1)), ','...
num2str(StartBarMid+0.5*width + width*(i-1)), ']'] };
end
bar(barCenter, 'FaceColor', '#CDA100'); % 画直方图
errorbar(barCenter,Stadevi, 'color', 'black', 'LineStyle', 'none', 'LineWidth', 1.5); % 画误差,并将线型去掉 none
%添加数据标签
for i = 1: range/width
text(StartBarMid + width*(i-1), 0.3,...
sprintf('%0.1f',tiltAng(i)), 'FontName', 'Arial', 'FontSize', 10, ...
'LineStyle', '-','BackgroundColor', 'white', 'Margin', 1, ...
'Rotation', 90);
end
ax = gca;
ax.XTick = 1: range/width;
ax.XTickLabel = label; % 设置x 坐标内容
ax.XTickLabelRotation = 45;
xlabel('Bending angle (^{o})', 'FontName', 'Arial', 'FontSize', 16)
ylabel('Tilt Angle (^{o})', 'FontName', 'Arial', 'FontSize', 16)
参考资料
https://openwetware.org/wiki/McClean:_Making_Nice_Bar_Plots
http://blog.sina.com.cn/s/blog_92d2c5e10102w15k.html
https://ww2.mathworks.cn/matlabcentral/answers/294200-barwitherr-position-of-errorbars
https://ww2.mathworks.cn/matlabcentral/fileexchange/30639-barwitherr-errors-varargin
https://blog.csdn.net/weixin_43196262/article/details/86165942