我正在尝试绘制散点图,例如:
scatter(coor(:, 2), coor(:, 3), 1, coor(:, 4));
问题是,我有很多坐标要绘制(~100 000)。它花了很长时间来绘制它,当我尝试将图形输出到tiff时 - 然后matlab已经死了好几分钟...任何改善绘图的解决方案,或者至少是tiff export?
编辑: 忘了提,第三坐标(coor(:,4))是一个颜色代码。
所以,当我使用分散(如上所述)时,我在下面的图像上有类似的东西,这就是我想要看到的东西(只是它超级慢,我无法导出):
当我这样做时:
plot3(coor(:,2),coor(:,3),coor(:,4),'。')
效果不再那么酷(注意:图像不是来自相同的坐标......):
答案 0 :(得分:23)
您可以使用plot,但所有点都具有相同的颜色。但是,您可以在不同的子集中划分集合,并使用自己的颜色绘制每个集合:
N = 100000;
x = rand(N,1);
y = rand(N,1);
C = sin(2*x)+y;
cdivs = 10;
[~, edges] = hist(C,cdivs-1);
edges = [-Inf edges Inf]; % to include all points
[Nk, bink] = histc(C,edges);
figure;
hold on;
cmap = jet(cdivs);
for ii=1:cdivs
idx = bink==ii;
plot(x(idx),y(idx),'.','MarkerSize',4,'Color',cmap(ii,:));
end
colormap(cmap)
caxis([min(C) max(C)])
colorbar
响应已经比scatter(x,y,1,C)
好很多,它给出了相同的情节,但颜色分辨率更高(可以在上面的代码中调整)。
答案 1 :(得分:1)
我的经验是,matlab中最有效的绘图命令是Patch,我用它来模拟散射或散射3的功能,效率更高。
如果您有一个点列表,请使用每个点为您的特定数据定义合理边长的方形补丁(或八边形或其他),然后通过一次调用补丁来绘制补丁集合。创建图形对象后,您可以更新其颜色数据以单独为正方形着色。
您可以通过在数据集中构建立方体或3D十字架,在3D中使用相同的概念。
此片段创建1e5个随机放置的方块,在这种情况下使用随机颜色,并在我四岁的笔记本电脑上以不到一秒的速度运行。对散射的类似调用需要40秒,并返回难以操作的难以操作的数字。
tic
P=rand(1e5,2);
Edge=.01;
X=[P(:,1)'; P(:,1)'+Edge; P(:,1)'+Edge; P(:,1)'];
Y=[P(:,2)'; P(:,2)'; P(:,2)'+Edge; P(:,2)'+Edge];
figure;
h=patch(X,Y,'r');
set(h,'facevertexcdata',rand(size(X,2),3),'facecolor','flat','edgecolor','none')
drawnow
toc
答案 2 :(得分:0)
是的,使用plot3
plot3(coor(:, 2), coor(:, 3), coor(:, 4), '.')
这与三维散点图相同(点数为小点,如果需要,也可以使用'o' or 'x'
)
答案 3 :(得分:0)
如果您有太多分数,那么精简数据可能是有意义的。
基本上你可以做两种方法:
简单 - 只需选择 - 随机说出10%的分数。
丢弃不可见的点,显然是那些超出你范围的点,但如果你有很多重叠点 - 比如说一个点的直径应该是3px - 所以一点可以说是9px。在我的机器上,你发布的情节就是 - 比如400x400px,所以最多可以看到ceil(400*400/9) < 20 000
个数据点。
你也可以尝试将情节分成更小的块 - 比如绘制1000点,发出drawnow
然后发出下一个1000直到你完成。所以你不必在空白屏幕前等待。