c と d の 2 つのベクトルがあり、そのヒストグラムを matlab の同じ図に並べてプロットする必要があります。hist(c); を実行するとき 持続する; hist(d) スケールが変更され、c ベクトルのヒストグラムが表示されません。どこが間違っているのですか?どんな助けでも大歓迎です。
4 に答える
2 つを同じ図にしたい場合は、必要に応じてX
とY
の制限を調整してみてください ( と を試しhelp xlim
てくださいhelp ylim
)。ただし、特定のプロットはもちろん と の特定の制限を維持する必要があるため、それらを同じ図にプロットすることが常にニーズに合うとは限りませX
んY
。
ただし、それらを異なる図に並べて表示するだけで十分な場合は、次の使用を検討できます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);
結果の図:
さまざまな軸の制限がどのように維持されているかに注意してください。
を使用axis([xmin xmax ymin ymax])
して x 軸と y 軸を制御し、両方のヒストグラムを表示する範囲を選択できます。プロットをどのように表示したいかによっては、 を使用nelements = hist(___)
して各ビンの要素数を取得し、 を使用してbar(x,nelements)
各バーの位置を制御してプロットすることもできます。
hist
デフォルトで範囲を 10 個の等しいサイズのビンに分割することを前提としています。両方のヒストグラムに同じビンを使用する場合は、まず値の範囲を見つけて、ビンの中心のセットを作成します (例: binCenters = linspace(min(x), max(x), 15)'), then call
hist(x, binCenters)`.
私は MATLAB ヒストグラムを頻繁に使用しており、この小さな matlab スクリプトを作成して、1 つの図に 2 つのヒストグラム (最初は赤、2 番目は青) をプロットしました。スクリプトは非常に単純ですが、重要なことは、ヒストグラムが比較可能であることです (つまり、等間隔の周波数ビン)。
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)