Как повернуть ось Y гистограммы, чтобы показать процент от 0 до 1 - PullRequest
0 голосов
/ 13 мая 2019

Я хочу изменить ось Y гистограммы, чтобы показывать проценты в диапазоне от 0 до 1. Это то, что я пробовал, но, похоже, это не работает.

    myTolerance=1e-12; % in erg units.
      nbins=50;
    for j=1:ntM/100:ntM

       H = histfit(Wkinet(abs(Wkinet(:,j))>myTolerance, j) * erg2eV, nbins);
    %Select from column j all rows in column j whose absolute values are 
    %greater than the tolerance.
    H(1).delete; %%Remove bins, only keep the fit.
       set(gca, 'YScale', 'log');
        set(gca, 'XScale', 'log'); % Make logarithmic X
         yt = get(gca, 'YTick');
        set(gca, 'YTick', yt, 'YTickLabel', 
        yt/numel(Wkinet(abs(Wkinet(:,j))>myTolerance)))

      pause;
   end

Вот как это выглядит сейчас:

Output Graph

Вот что я хочу:

Desired output graph

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Просто, чтобы упростить обсуждение ниже, строка

H = histfit(Wkinet(abs(Wkinet(:,j))>myTolerance, j) * erg2eV, nbins);

эквивалентна

data = Wkinet(abs(Wkinet(:,j))>myTolerance, j) * erg2eV;
H = histfit(data, nbins);

Это означает, что ниже мы будем предполагать, data - это вектор.


histfit вычисляет и строит гистограмму, хотя histogram, затем подгоняет к ней функцию через fitdist.Поскольку вы не хотите строить саму гистограмму, просто придерживайтесь fitdist:

pd = fitdist(data,'Normal'); % this is the default distribution used in `histfit`, is it correct?
x = linspace(min(data),max(data),200); % 200 points in the graph, you might want to change this?
y = pdf(pd,x);
plot(x,y);

Теперь просто нормализовать график так, как мы хотим.Например, установите для первого элемента значение 1:

pd = fitdist(data,'Normal');
x = linspace(min(data),max(data),200);
y = pdf(pd,x);
y = y/y(1);    % <<< Normalize
plot(x,y);
0 голосов
/ 14 мая 2019

Вы можете установить ограничения для вашей оси Y, используя

ylim([1e-3 1]) %lower limit is nonzero since it's plotted on log scale

или

set(gca, 'ylim', [1e-3 1])

...