我如何将每个观察值的概率分布绘制为彩色图?
How i plot probability distribution of each observation as a colour plot?
假设我有以下十一个值:
>> 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,依此类推...
现在,x 轴上的索引 (1-11) 和可能发生的值范围的简单图绘制在 y 轴 (0-300) 上,如下所示:
plot(1:11,values);ylim([0 300])
结果图如下:
假设我想沿着 Y 轴用蓝色阴影绘制每个值的概率。更高强度的蓝色意味着更高的价值。
在我的示例中,值=100 时将有 5 个蓝色点。在图上,点 (1,0)、(1,50)、(1,90)、(1,150)、(1,160) 将是一个实心蓝色圆圈。点 (1,0) 的蓝色阴影应该比点 (1,50) 更浅,因为它出现的可能性更小。 Point(1,50) 和 point(1,90) 应该具有相同的蓝色阴影,因为它们具有相同的概率。
我的想法用MSPAINT编辑的图片表示如下:
如何在 Matlab 中生成上述要求的绘图?
在对 scatter
function and on creating custom colormaps 有了一些了解后,这里有一个 straight-forward 方法:
% 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();
我们得到以下输出:
如您所见,对于具有附近概率值(0.1
到 0.3
)的示例(第一列),很难使用所选颜色图区分颜色。尽管如此,你看,它正在工作(第二和第三列)。因此,也许可以尝试使用颜色图来找到最能满足您需求的颜色图。
希望对您有所帮助!
假设我有以下十一个值:
>> 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,依此类推...
现在,x 轴上的索引 (1-11) 和可能发生的值范围的简单图绘制在 y 轴 (0-300) 上,如下所示:
plot(1:11,values);ylim([0 300])
结果图如下:
假设我想沿着 Y 轴用蓝色阴影绘制每个值的概率。更高强度的蓝色意味着更高的价值。
在我的示例中,值=100 时将有 5 个蓝色点。在图上,点 (1,0)、(1,50)、(1,90)、(1,150)、(1,160) 将是一个实心蓝色圆圈。点 (1,0) 的蓝色阴影应该比点 (1,50) 更浅,因为它出现的可能性更小。 Point(1,50) 和 point(1,90) 应该具有相同的蓝色阴影,因为它们具有相同的概率。
我的想法用MSPAINT编辑的图片表示如下:
如何在 Matlab 中生成上述要求的绘图?
在对 scatter
function and on creating custom colormaps 有了一些了解后,这里有一个 straight-forward 方法:
% 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();
我们得到以下输出:
如您所见,对于具有附近概率值(0.1
到 0.3
)的示例(第一列),很难使用所选颜色图区分颜色。尽管如此,你看,它正在工作(第二和第三列)。因此,也许可以尝试使用颜色图来找到最能满足您需求的颜色图。
希望对您有所帮助!