高分求助:有这些离散点,如何画出这种有颜色深度的图?即,重合的点颜色会被加深,是用matlab画的么?

2024-12-03 13:09:57
推荐回答(2个)
回答1:

没有你的原始数据,这里贴一个简单的例子:

clc; clear; close all;

map = zeros(200, 511);

for col = 1:511
map(:,col) = col;
end

map = 1- mat2gray(map);
figure,imshow(map);
colormap(summer(511));


针对你的需求,实际上就是需要一张颜色表,其中每种颜色对应你数据中,每个点被重合的次数。

上面那段代码中,从第1列开始到第511列,每列的值的次数依次为1~511,然后调用系统自带的颜色表summer,生成511种颜色,并调用colormap加载该颜色表。

需要注意的是,通常颜色表中,值越大时颜色越亮,值越小时颜色越深,而你的需求正好相反。所以使用了“1-mat2gray()”的代码获得这个效果。


照此,你可以使用你的离散点建立一个矩阵a,矩阵中的每个元素为各点对应的重叠次数,然后:

1、使用mat2gray(a),将矩阵归一化;

2、构造一个对应的颜色表,为N行3列的形式,每种颜色对应一个次数值。当然你可以直接调用系统自带的,如summer(X),这里X的值可设为最大的重叠次数;

3、使用imshow(a)显示矩阵,然后调用colormap加载颜色表。


另外,如果你只想要summer中偏绿的颜色,而不需要偏黄的,可以建一个较大的颜色表,然后取其中的一半即可,代码如下:

clc; clear; close all;

map = zeros(200, 511);

for col = 1:511
map(:,col) = col;
end

map = 1- mat2gray(map);
figure,imshow(map);

clm = summer(1024);
clm = clm(1:511,:);    %只需要一半
colormap(clm);

回答2:

是啊,看的就是单位面积绿色色素点的多少