我使用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);
提前致谢。
答案 0 :(得分:8)
您可能希望使用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
结果如下
答案 1 :(得分:3)
要摆脱网格线,请使用以下内容:
hchild=get(gca,'children');
set(hchild,'edgecolor','none')
色图是m x 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)