Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 根据X-Y平面上的值,使用颜色绘制二维图_Matlab_Colors_Plot - Fatal编程技术网

Matlab 根据X-Y平面上的值,使用颜色绘制二维图

Matlab 根据X-Y平面上的值,使用颜色绘制二维图,matlab,colors,plot,Matlab,Colors,Plot,我有任意点(X,Y),其中有两个对应的特征值 我决定将特征值分为三类,即: 两者均>0 两者均0,第2个特征值0,第2个特征值0和vecStor(:,:,2)

我有任意点(X,Y),其中有两个对应的特征值

我决定将特征值分为三类,即:

  • 两者均>0
  • 两者均<0
  • 任何一个=0
  • 1个特征值>0,第2个特征值<0
  • 我想画出来,用不同的颜色对X-Y平面上的每个点(X,Y)进行颜色编码

    我使用了imagesc,但它没有显示X-Y平面

    这里是我试图得到的一个草图,其中颜色编码表示为特定(X,Y)获得的特征值的场景

    p、 对不起,应该还有1种情况,即1个特征值>0,第2个特征值<0

    有人能告诉我在哪里可以读到更多关于这个的信息吗

    编辑:这是我的代码

    VECTOR是一个2 x n矩阵,存储每个对应行中的特征值

    %e.g     vecStor = [ 1 2 3 ; 4 5 6] 
    %eigenvalues 1 and 4 corresponds to (X1,Y1)
    %eigenvalues 2 and 5 corresponds to (X2,Y2)
    
    接下来,我为每个“案例”指定了一个值 其中,l是for循环通过VECTOR运行的计数器

    输入数据(
    vecStore
    )应为三维向量,尺寸为
    NxMx2
    ,其中
    N
    为行数(或Y高度),
    M
    为列数(或X宽度),第三维尺寸为2(对于每个X/Y值的两个特征值)。让我们创建一个表示特征值的随机矩阵:

    numRows = 10;
    numColumns = 10;
    vecStor = randn(numRows,numColumns,2);
    
    然后检查矩阵中每个元素的条件,类似于您在代码片段中所做的。循环遍历所有行和列,并根据特征值属性创建包含四个不同值的二维颜色贴图:

    colourStore = zeros(numRows,numColumns);
    for r = 1:size(vecStor, 1)
        for c = 1:size(vecStor, 2)
            if (vecStor(r,c,1) < 0 && vecStor(r,c,2) < 0)
                % Double Neg
                colourStore(r,c) = -3;            
            elseif (vecStor(r,c,1) > 0 && vecStor(r,c,2) > 0)
                % Double Pos
                colourStore(r,c) = +3;            
            elseif (vecStor(r,c,1) > 0 && vecStor(r,c,2) < 0)
                % First Pos, Second Neg
                colourStore(r,c) = -1;            
            elseif (vecStor(r,c,1) == 0 || vecStor(r,c,2)  == 0)
                % One Zero
                colourStore(r,c) = +1;
            end
        end
    end
    
    示例输出:

    编辑 下面是一种使用逻辑索引进行无循环分类的方法:

    colourStore(vecStor(:,:,1) < 0 & vecStor(:,:,2) < 0 ) = -3;
    colourStore(vecStor(:,:,1) > 0 & vecStor(:,:,2) > 0) = 3;
    colourStore(vecStor(:,:,1) > 0 & vecStor(:,:,2) < 0) = -1;
    colourStore(vecStor(:,:,1) == 0 | vecStor(:,:,2) == 0) = 1;
    
    colorstore(vector(:,:,1)<0&vector(:,:,2)<0)=-3;
    彩色存储(vecStor(:,:,1)>0和vecStor(:,:,2)>0)=3;
    彩色存储(vecStor(:,:,1)>0和vecStor(:,:,2)<0)=-1;
    彩色存储(vecStor(:,:,1)==0 | vecStor(:,:,2)==0)=1;
    
    您能添加一些代码来显示您是如何尝试的吗
    imagesc
    ?同时显示您的数据格式我认为您误解了
    图像
    。图像数据是NxMx3矩阵,因此前两个索引表示xy位置,第三个索引表示RGB颜色。这意味着,
    img(1,1,1)
    将是点(1,1)的红色强度,
    img(2,1,2)
    点(2,1)的绿色强度,
    img(34,13,1)
    将是点(34,13)的红色强度,依此类推。抱歉重复了这么多。我通常发现3D矩阵很难解释,所以更多的例子将有助于更好地了解模式。谢谢。我想这是解决这个问题的一种方法。但是我现在意识到我将处理(X,Y)的坐标,从0到1(即0.1,0.2)。这使得访问各种向量的元素变得困难。我想我可以缩放Vector。但最终当我在这家商店里策划时,这让人头疼。所以我正在调查。但在你的例子之后,我现在看到这个imagesc是如何工作的。谢谢最后,更简单的是,在您的示例输出中,Y轴从顶部开始,而不是从图形的左下角开始,X轴从那里开始
    colourStore = zeros(numRows,numColumns);
    for r = 1:size(vecStor, 1)
        for c = 1:size(vecStor, 2)
            if (vecStor(r,c,1) < 0 && vecStor(r,c,2) < 0)
                % Double Neg
                colourStore(r,c) = -3;            
            elseif (vecStor(r,c,1) > 0 && vecStor(r,c,2) > 0)
                % Double Pos
                colourStore(r,c) = +3;            
            elseif (vecStor(r,c,1) > 0 && vecStor(r,c,2) < 0)
                % First Pos, Second Neg
                colourStore(r,c) = -1;            
            elseif (vecStor(r,c,1) == 0 || vecStor(r,c,2)  == 0)
                % One Zero
                colourStore(r,c) = +1;
            end
        end
    end
    
    imagesc(colourStore);
    
    colourStore(vecStor(:,:,1) < 0 & vecStor(:,:,2) < 0 ) = -3;
    colourStore(vecStor(:,:,1) > 0 & vecStor(:,:,2) > 0) = 3;
    colourStore(vecStor(:,:,1) > 0 & vecStor(:,:,2) < 0) = -1;
    colourStore(vecStor(:,:,1) == 0 | vecStor(:,:,2) == 0) = 1;