是否可以将 Matlab 中的多个垂直直方图绘制为一个?很像随附的 Excel 表(https://drive.google.com/file/d/1H_mbyrIoln3XrnK1hLajnVNBKn13y_np/view?usp=sharing)
我想通过导入 excel 文件将许多垂直直方图绘制成一个图形,其中在 y 轴上它具有高程,x 轴是直方图垂直线之间的距离和直方图条的长度是excel表中的值。每个条形的垂直高度为 5。
这甚至可能吗?我必须为 Matlab 设置一些条件才能知道在哪里绘图,但是有人可以告诉我基本的方法吗?
非常感谢您的帮助!
问题是Baseline
对象的父对象是Axis
,这会阻止我们做类似的事情
barh(bins1,counts1,'Basevalue',baseline1); hold on;
barh(bins2,counts2,'Basevalue',baseline2); hold off;
因为绘图将自动共享第二个基线值集。可能有一个我不知道的解决方法,所以我邀请任何知道它的人向我展示它是如何完成的。
现在,我能够以一种不太优雅的方式复制您发布图片的情节。我将在下面发布代码,但在此之前,我想反对使用这样的情节。为什么?因为我认为它令人困惑,因为 x 轴既与绘图编号有关,也与 bin 计数有关。您实际上是在尝试显示 3-D 数据集,三个维度分别是 bin、bin 计数和“直方图编号”。存在多种显示 3-D 数据的方法,一系列 2-D 直方图可能不是最好的方法。
话虽如此,但正如承诺的那样,这里的代码或多或少地创建了上面的图片。您可能想要进行的任何更改都将比平时更麻烦:-)
testData = randn(10000,1); % Generate some data
[counts,bins] = hist(testData); % Bin the data
% First histogram
baseline1 = 0;
p1=subplot(1,3,1); barh(bins,counts,'BaseValue',baseline1);
xticks(baseline1); xticklabels({0}); % Graph number on x axis at baseline (0)
box off; % Remove box on right side of plot
ylabel('Property');
% Second histogram
baseline2 = max(counts)*1.2;
sepdist = baseline2-baseline1; % Distance that separates two baselines
counts2 = baseline2 + counts;
p2=subplot(1,3,2); barh(bins,counts2,'BaseValue',baseline2)
xticks(baseline2); xticklabels({1}); % Graph number on x axis at baseline
box off;
Y=gca; Y.YAxis.Visible='off';
p1p=p1.Position; p2p=p2.Position;
p2p(1)=p1p(1)+p1p(3); p2.Position=p2p; % Move subplot so they touch
% Third histogram
baseline3 = baseline2 + sepdist;
counts3 = baseline3+counts;
p3=subplot(1,3,3); barh(bins,counts3,'BaseValue',baseline3)
xticks(baseline3); xticklabels({2});
Y=gca; Y.YAxis.Visible='off';
box off
p3p=p3.Position;
p3p(1)=p2p(1)+p2p(3); p3.Position=p3p;
% Add x-label when you are done:
xl=xlabel('Test xlabel'); xl.Units='normalized';
% Fiddle around with xl.Position(1) until you find a good centering:
xl.Position(1) = -0.49;
结果:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句