MATLAB中的imagesc函数如何显示网格线?

4
我一直在尝试使用imagesc函数显示实心黑色网格线,使得每个像素周围都有黑色边界。我尝试了几种方法,但似乎无论如何,线条总是穿过像素。例如,对于imagesc(randn(21,21)),我正在尝试获得一个绘图,其中每个正方形(即像素)都有一个黑色边框。
我在这里找到了一个解决方案:In matlab, how to draw a grid over an image,但我不确定如何让它与imagesc一起工作,而不是一个.jpg图像。
我还尝试使用hold on函数手动放置线条。但似乎每个解决方案中,网格线都穿过像素的中心。任何帮助将不胜感激。谢谢。
4个回答

6

pcolor的作用就是将数据绘制成颜色图:

pcolor(randn(15,21))
axis image %// equal scale on both axes
axis ij %// use if you want the origin at the top, like with imagesc

enter image description here


5
基本的区别在于,pcolor 给顶点上色而非单元格,而 imagesc 给单元格上色。因此,转换从 imagescpcolor 时应当注意内容会被移位。请检查以下代码:figure;pcolor(hadamard(20));title('pcolor');set(gca,'YDir','Reverse');figure;imagesc(hadamard(20)) - Girardi

5
请尝试以下步骤:
imagesc(randn(21,21))
hold on;
for i = 1:22
   plot([.5,21.5],[i-.5,i-.5],'k-');
   plot([i-.5,i-.5],[.5,21.5],'k-');
end

编辑:问题在于像素的中心位于整数格点上,因此要勾勒出像素,您需要使用以.5结尾的坐标。


2

@luis-mendo答案的扩展

正如@Girardi所提到的,pcolor会改变矩阵内容的位置。例如:

i = eye(5);
pcolor(i);
axis image %// equal scale on both axes
axis ij %// use if you want the origin at the top, like with imagesc

给出注意:显示的是4x4而不是5x5 注意它给出的是4x4而不是5x5解决方案:用零填充矩阵。
i = eye(5);
pcolor([i, zeros(size(i,1), 1); zeros(1, size(i,2)+1)])
axis image %// equal scale on both axes
axis ij %// use if you want the origin at the top, like with imagesc
axis off

"给予"

Correct


0
如果您想要突出显示对角线,请执行以下操作:
    mat=rand(10);
    figure, imagesc(mat)
    colormap gray

    hold on;
    n=size(mat,1);
    for i = 1:n
       plot([.5,n+.5],[i-.5,i-.5],'k-');
       plot([i-.5,i-.5],[.5,n+.5],'k-');
    end

    % Highlight diagonal values
    k=0.5;
    for i=1:numel(diag(mat))
    line([k, i+.5], [i+.5, i+.5], 'Color', 'r', 'LineWidth', 2);
    k=k+1;
    end

    k=0.5;
    for i=1:numel(diag(mat))
    line([k, i+.5], [k, k], 'Color', 'r', 'LineWidth', 2);
    k=k+1;
    end

    k=0.5;
    for i=1:numel(diag(mat))
    line([i+.5, i+.5], [k, i+.5], 'Color', 'r', 'LineWidth', 2);
    k=k+1;
    end

    k=0.5;
    for i=1:numel(diag(mat))
    line([k, k], [k, i+.5], 'Color', 'r', 'LineWidth', 2);
    k=k+1;
    end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接