我使用 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);

提前致谢。

最佳答案

您可能希望使用 matlab file exchange 中的 gridfit 函数。平滑效果来自插值(要绘制更多点)和可用颜色的充分利用(此处为 colormap jet)。请注意,edgecolor 设置为 none 以便删除黑线。

正如这里使用的那样,它获取 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

这是结果

关于matlab - 是否可以使 hist3 图更平滑?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18441136/

10-15 14:00