fix*_*uff 1 matlab plot image sparse-matrix
我想以一种imagesc类型的样式绘制稀疏矩阵(每个像素一种颜色,而不是符号a la scatter)。矩阵由分布在10000x10000平方上的斑点组成。我预计大约有100个Blob,每个Blob为50x100像素。这个矩阵是如此之大,以至于放大或缩小或在其中四处移动以检查数据都变得很麻烦。而且我仍然想保持分辨率。有没有办法绘制一个稀疏矩阵,该矩阵仅绘制斑点并以色图的“零色”作为背景,而不会占用内存空间?
假设我们有一个矩阵M,看起来像这样:
[1, 2, 1, 0;
0, 1, .4, 0;
0, 0, 0, 0;
0, 7, 0, 0]
Run Code Online (Sandbox Code Playgroud)
当我将其绘制为稀疏矩阵时
figure;
imagesc(sparse(M));
Run Code Online (Sandbox Code Playgroud)
它的大小与省略稀疏命令的大小相同。这就是我要规避的。
代替将矩阵视为图像,您可以仅绘制其非零值。使用scatter(而不是plot)可以让您将颜色作为值的函数,如中所述imagesc。
默认情况下scatter,背景保持白色,因此您必须对其进行调整。这分两步完成:确保scatter的颜色缩放将颜色表的第一种颜色分配为值0;然后手动将轴的背景设置为该颜色。
我还没有测试这是否占用更少的内存。
%// Generate example matrix
M = 10000*rand(1000);
M(M>100) = 0;
M = sparse(M); %// example 1000x1000 matrix with ~1% sparsity
%// Do the plot
cmap = jet; %// choose a colormap
s = .5; %// dot size
colormap(cmap); %// use it
[ii, jj, Mnnz] = find(M); %// get nonzero values and its positions
scatter(1,1,s,0) %// make sure the first color corresponds to 0 value.
hold on
scatter(ii,jj,s,Mnnz); %// do the actual plot of the nonzero values
set(gca,'color',cmap(1,:)) %// set axis backgroud to first color
colorbar %// show colorbar
Run Code Online (Sandbox Code Playgroud)
注意轴的方向可能不同于imagesc。

| 归档时间: |
|
| 查看次数: |
2258 次 |
| 最近记录: |