首页 文章

在matlab中绘制多个垂直直方图

提问于
浏览
0

是否有可能在Matlab中将多个垂直直方图绘制成一个?就像封闭的excel表一样(https://drive.google.com/file/d/1H_mbyrIoln3XrnK1hLajnVNBKn13y_np/view?usp=sharing

我想通过导入excel文件将许多垂直直方图绘制成一个图,其中y轴上有高程,x轴是直方图垂直线和直方图条之间的距离是excel表中的值 . 每个条的垂直高度为5 .

这有可能吗?我必须为Matlab提供一些条件才能知道在哪里绘图,但有些人可以向我展示基本方法吗?

非常感谢帮助!

enter image description here

1 回答

  • 2

    问题是 Baseline 对象的父级是 Axis ,这阻止我们做类似的事情

    barh(bins1,counts1,'Basevalue',baseline1); hold on;
    barh(bins2,counts2,'Basevalue',baseline2); hold off;
    

    因为这些图将自动共享第二个基线值集 . 可能有一个我不知道的解决方法,所以我邀请任何知道它的人向我展示它是如何完成的 .

    就目前而言,我能够以一种不那么优雅的方式复制你发布的图片 . 我将在下面发布代码,但在此之前,我想反对使用这样的情节 . 为什么?因为我认为这是令人困惑的,因为x轴都与绘图编号以及仓计数有关 . 您实际上是在尝试显示三维数据集,三维是二进制数,二进制数和“直方图数” . 存在大量用于显示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;
    

    结果:

    Result

相关问题