Как я могу изобразить распределение вероятностей каждого наблюдения как цветной график? - PullRequest
0 голосов
/ 06 июня 2019

Допустим, у меня есть следующие одиннадцать значений:

>> values=[100:10:200]

values =

   100   110   120   130   140   150   160   170   180   190   200

Каждое из 11 значений является случайным распределением, каждое из которых может принимать вероятности от 0 до 300.

Например, первое значение 100 берется из распределения вероятности dist следующим образом:

>> dist=[0 0.1;50 0.3; 90 0.3; 150 0.2 ;160 0.1]

dist =

         0    0.1000
   50.0000    0.3000
   90.0000    0.3000
  150.0000    0.2000
  160.0000    0.1000

Это означает, что значение 100 могло принимать значение 0 с вероятностью 0,1, значение 50 с вероятностью 0,3 и т. Д. ...

Теперь простой график индексов (1-11) по оси x и диапазона значений, которые могут иметь место, нанесен по оси y (0-300) следующим образом:

plot(1:11,values);ylim([0 300])

Результирующая фигура выглядит следующим образом:

enter image description here

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

В моем примере будет 5 точек синего цвета для значения = 100. На графике точки (1,0), (1,50), (1,90), (1,150), (1,160) будут заполнены синим кружком. Точка (1,0) должна иметь более светлый оттенок синего, чем точка (1,50), поскольку вероятность ее появления меньше. Точка (1,50) и точка (1,90) должны иметь одинаковый оттенок синего, поскольку они имеют одинаковую вероятность.

Моя идея представлена ​​в отредактированной картине MSPAINT следующим образом:

enter image description here

Как сгенерировать вышеуказанный требуемый участок в Matlab?

1 Ответ

1 голос
/ 06 июня 2019

С некоторым пониманием функций scatter и создания пользовательских цветовых карт , вот простой подход:

% Distributions
dist{1} = [0 0.1; 50 0.3; 90 0.3; 150 0.2; 160 0.1];
dist{2} = [0 0.01; 100 0.7; 150 0.29];
dist{3} = [160 1.0];

figure(1);
hold on;
for ii = 1:numel(dist)

  % Number of distribution values
  n = size(dist{ii}, 1);

  % Scatter plot: 
  %   x = iterating index 
  %   y = distribution value
  %   c = probability value
  scatter(ii .* ones(n, 1), dist{ii}(:, 1), 151, dist{ii}(:, 2), 'filled', 'MarkerEdgeColor', 'k');

end
hold off;
xlim([0 4]);
ylim([-50 300]);

% Colormap dark blue -> light blue
cm = [(0:0.01:1).' (0:0.01:1).' ones(101, 1)]
colormap(cm);
colorbar();

Мы получаем следующеевывод:

Output

Как вы видите, для вашего примера (первый столбец) с близкими значениями вероятности (0.1 до 0.3) этотрудно различить цвета, используя выбранную цветовую карту.Тем не менее, вы видите, это работает (второй и третий столбец).Так что, возможно, поэкспериментируйте с картой цветов, чтобы найти ту, которая наилучшим образом соответствует вашим потребностям.

Надеюсь, это поможет!

...