Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何使用点数据绘制彩色区域?_Matlab_Plot_Matlab Figure - Fatal编程技术网

Matlab 如何使用点数据绘制彩色区域?

Matlab 如何使用点数据绘制彩色区域?,matlab,plot,matlab-figure,Matlab,Plot,Matlab Figure,我在MATLAB中有一个数组,data,如下所示: data = [0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1; 0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1; 0 0 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1

我在MATLAB中有一个数组,
data
,如下所示:

data = [0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1;
        0 0 0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1;
        0 0 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1;
        0 0 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1;
        0 0 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1;
        0 0 0 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1;
        0 0 0 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1;
        0 0 0 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1;
        0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1;
        0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1;
        0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1;
        0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1;
        0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1;
        0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1;
        0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1;
        0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1;
        0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1;
        0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1;
        0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1;
        0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1;
        0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 1 1 1 1;
        0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 1 1 1 1;
        0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 1 1 1];
这个矩阵中的数字代表颜色。例如:

1 → red
0 → white
反正也不一定是这些颜色

different number → different color
我想在二维平面上展示

我对环境绘图点使用
(但这些是离散点,不是区域)

如果我使用
surf(data)
,它将有一个3D绘图:

我可以旋转上面的3D绘图和视图,就像:

这张图片是我想要在2D平面上绘制的


有没有办法直接在二维平面上绘图?

您可能需要等高线图。您可以通过以下方式获得:

[X, Y] = meshgrid(1:size(data,2), 1:size(data,1)); 
contourf(X,Y,data);
要获得更为方形和独特的外观,您可以尝试:

scatter(reshape(X,[],1), reshape(Y,[],1), 1200, reshape(data,[1],1), 'square', 'filled'); 
axis equal
但是,此解决方案要求您反复尝试大小(1200),这将取决于绘图的屏幕大小

最后,在较新的Matlab版本(R2017b+)中,您可以对这些类型的图()使用热图,例如:


谢谢,我还将检查热图样式的解决方案,以防OP不希望在维度之间进行插值。您的代码很好,但两种颜色之间存在“过渡线”,我认为应该立即更改颜色。明白。Countour图假设数据是连续变化函数的采样。我认为热图功能可以替代,但不幸的是,我只能访问R2016b,它已经改变:因此,无法检查这个;语法可能类似于:heatmap(数据,'CellLabelColor','none')imagesc(数据)
有什么问题?@CrisLuengo做得很好。一个精心起草的问题[+1]上面的第三个图也是'pcolor'的输出,它基本上是颜色,就像您使用了'surf'命令一样,但所有的z值都是0。当你想把2D和3D放在一起的时候,这很方便。
heatmap(data, 'CellLabelColor', 'none')