7

我使用 hist3() 函数来绘制点的密度。它创建一个网格并找到每个网格中的点数,然后创建绘图。但是情节上的颜色是离散的。是否有使这种分布平滑的选项,即使从一种颜色到另一种颜色的过渡更平滑。现在网格的所有单元格都有不同的颜色,从咧嘴笑到黄色,分布不明显。

我使用以下代码。

axis equal;
colormap(jet);
n = hist3(final',[40,40]);
n1 = n'; 
n1( size(n,1) + 1 ,size(n,2) + 1 ) = 0; 
xb = linspace(min(final(:,1)),max(final(:,1)),size(n,1)+1);
yb = linspace(min(final(:,2)),max(final(:,2)),size(n,1)+1);
pcolor(xb,yb,n1);

提前致谢。

4

2 回答 2

8

您可能想使用matlab 文件交换gridfit中的函数。平滑效果来自插值(更多点要绘制)和可用颜色的充分利用(此处)。请注意,设置为以便删除黑线。colormap jetedgecolornone

正如这里使用的那样,它获取 hist3(20x20 矩阵)的输出并对其进行插值(100x100)。然后它使用 绘制一个曲面surf。此外,您可以取消注释该camlight选项。

final = randn(1000,2)';  
n = hist3(final',[20,20]); %binning  
figure('Color','w');  

%your code with pcolor   
subplot(1,2,1);  
axis equal;  
colormap(jet);  
n1 = n';   
n1( size(n,1) + 1 ,size(n,2) + 1 ) = 0;   
xb = linspace(min(final(:,1)),max(final(:,1)),size(n,1)+1);  
yb = linspace(min(final(:,2)),max(final(:,2)),size(n,1)+1);  
pcolor(xb,yb,n1)  


%density with gridfit function  
subplot(1,2,2);  
nb_interp_point = 100;
[x,y] = meshgrid(1:size(n,1),1:size(n,2));  
zgrid = gridfit(x(:), y(:), n, nb_interp_point, nb_interp_point);  
surf(zgrid,'EdgeColor','none')  
set(gca,'YDir','reverse');  
view(-90,90);  
% camlight right  
% lighting phong  

这是结果

在此处输入图像描述

于 2013-08-26T11:56:03.370 回答
3

要摆脱网格线,请使用以下命令:

hchild=get(gca,'children');
set(hchild,'edgecolor','none')

颜色图是 mx 3 (rgb) 数组。您可以自由创建自己的colormap. 例如,您可以缩小colormap您正在使用的范围,如下例所示:

cmap=colormap(summer);
range = [40:64]; % <-- here I am using a 64 element colorspace 
                 %  and narrowing the selection to the upper range
nc = size(cmap,1);

range = [range(1):(range(end)-range(1))/(nc-1):range(end)];
cmap(:,1)=interp1([1:nc],cmap(:,1),range);
cmap(:,2)=interp1([1:nc],cmap(:,2),range);
cmap(:,3)=interp1([1:nc],cmap(:,3),range);
colormap(cmap)
于 2013-08-26T11:13:23.030 回答