在Matlab中并排绘制直方图

时间:2013-03-25 13:41:08

标签: matlab histogram

我有两个向量c和d,其直方图需要在matlab中的同一图中并排绘制。当我做     HIST(C);     坚持,稍等;     HIST(d) 比例变化,我无法看到c矢量的直方图。我哪里错了?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

如果您希望两者在同一图中,您可以尝试调整XY限制以满足您的需求(尝试help xlimhelp ylim) 。然而,在同一图中绘制它们可能并不总是适合您的需要,因为特定情节当然必须保持XY的某个限制。

如果在不同的数字中并排显示它们就足够了,您可以考虑使用subplot()

>> A=[1 1 1 2 2];
>> B=[1 2 2 2 2];
>> figure(1);
>> hold on;
>> subplot(1,2,1);
>> hist(A);
>> subplot(1,2,2);
>> hist(B);

结果图:

注意如何保持不同的轴限制。

答案 1 :(得分:1)

您可以使用axis([xmin xmax ymin ymax])来控制x和y轴,并选择一个显示两个直方图的范围。根据您希望绘图的样子,您可能还想尝试使用nelements = hist(___)获取每个bin中的元素数量,然后使用bar(x,nelements)绘制它们以控制每个柱的位置。

答案 2 :(得分:0)

hist假设您希望默认情况下将范围划分为10个相等大小的区间。如果要对两个直方图使用相同的bin,首先要找到值的范围并创建一组bin中心(例如binCenters = linspace(min(x), max(x), 15)'), then call hist(x,binCenters)`。

答案 3 :(得分:0)

我经常使用MATLAB直方图并编写了这个小的matlab脚本来绘制一个图中的两个直方图(第一个红色和第二个蓝色)。脚本非常简单,但重要的是直方图应具有可比性(即等间隔频率分档)。

function myhist(varargin)
% myhist function to plot the histograms of x1 and x2 in a single figure. 
% This function uses the same xvalue range and same bins to plot the
% histograms, which makes comparison possible. 
if nargin<2
    x1 = cell2mat(varargin(1));
    x2 = x1;
    res = 100;
elseif nargin==2
    x1 = cell2mat(varargin(1));
    if length(cell2mat(varargin(2)))==1
        res = cell2mat(varargin(2));
        x2 = x1;
    else
        x2 = cell2mat(varargin(2));
        res = 100;
    end
elseif nargin>2
    x1 = cell2mat(varargin(1));
    x2 = cell2mat(varargin(2));
    res = cell2mat(varargin(3));
end

if numel(x1)~=length(x1) || numel(x2)~=length(x2)
    error('Inputs must be vectors.')
    return
end

xrangel = max(min(x1),min(x2));
xrangeh = min(max(x1),max(x2));

x1_tmp = x1(x1>=xrangel & x1<=xrangeh);
x2_tmp = x2(x2>=xrangel & x2<=xrangeh);

xbins = xrangel:(xrangeh - xrangel)/res:xrangeh;

hist(x1_tmp,xbins)
hold on 
h = findobj(gca,'Type','patch');
set(h,'FaceColor','r','EdgeColor','w');
hist(x2_tmp,xbins)