0

在此处输入图像描述下午好,我有这段代码,我想在其中指定三个彩色区域。一种是当最终函数 C 和 C1 如代码所示合并在一起时小于 0 、介于 0 和 1 之间以及大于 1 时。在代码中,我需要最后合并和定义合并的轮廓图在三个简单的区域。结果如下图所示。一开始您可能会认为最主要的颜色是亮蓝色,但是当您查看轮廓图和颜色条时,由于某种原因它们不匹配。谢谢您的帮助。向管理员道歉,因为没有将此问题作为单独的问题发布。

    [r,R] = meshgrid(0.1:0.01:10,-5:0.01:5);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Z=(((R).^2)-1 );
           A=2+ (R.*(r+(1./r)));
           B=sqrt(Z).*(r-(1./r));
           Ratio=acoth(A./B);
           D= (r+(1./r))./4;
           E=D./sqrt(Z);

           C=D.*E.*Ratio;
    C(R==1)=(r(R==1)+(1./r(R==1)))*0.25.*((r(R==1).^2-1)./(2*r(R==1)+r(R==1).^2-1) );
    C(R==-1)=(r(R==-1)+(1./r(R==-1)))*0.25.*((r(R==1).^2-1)./(2*r(R==1)-r(R==1).^2+1) );
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Z1=((1 -(R).^2));
           A1=2+ (R.*(r+(1./r)));
           B1=sqrt(Z1).*(r-(1./r));
           Ratio1=EA(A1./B1);
           D1= (r+(1./r))./4;
           E1=D1./sqrt(Z1);

           C1=D1.*E1.*Ratio1;
    C1(R==1)=(r(R==1)+(1./r(R==1)))*0.25.*((r(R==1).^2-1)./(2*r(R==1)+r(R==1).^2-1) );
    C1(R==-1)=(r(R==-1)+(1./r(R==-1)))*0.25.*((r(R==1).^2-1)./(2*r(R==1)-r(R==1).^2+1) );

    test=C;
    test((R<1)&(R>-1))=nan;   
    test1=C1;
    test1(R>1)=nan;
    test2=test1;
    test2(R<-1)=nan;

       figure
          contourf(r,R,test)
        hold on
         contourf(r,R,test2);
        colormap(jet(3))
        conts = [-1:1:2];
            h=colorbar;
         set(get(h,'ylabel'),'string','\gamma P_P L','FontSize',18)
           xlabel('$r$','Interpreter','latex','FontSize',18)
        ylabel('$D \over 2\sqrt{M}$','Interpreter','latex','FontSize',18)
    set(h,'YTick',conts)
    set(gca,'fontsize',18)
        hold off 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function  y  = EA(x)

 y = acot(x);

y(y<0)=y(y<0)+pi;

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

代码结果

4

1 回答 1

1

好的,所以代码有两个主要问题。

1)颜色条需要设置为正确的限制。这意味着,您需要将 xolorbar 色标设置为另一个值。颜色条的颜色限制目前是一个属性'Clim',位于 2015b 的轴上。这些事情可能会改变,所以我建议为此使用该功能caxis。由于您有 3 种颜色并且想要范围 [-inf -> 0,0 -> 1,1 -> Inf]。我建议限制caxis([-1,2]);这将在您需要的地方设置休息时间。

2) 水平(MATLAB 称之为图中的拓扑水平)由 MATLAB 自动设置。这些值与您想要的不对应。使用这个论点contourf(r,R,test, 'ShowText', 'on'),你会明白我的意思。我不确定是否有内置函数来修改这些,但该属性被调用LevelList并在等高线图对象中找到。contourf您可以在函数中使用以下内容

contourf(r,R,test, 'LevelList', [-inf,-1,0,1,inf]);
contourf(r,R,test, 'LevelList', [-inf,-1,0,1,inf]);
于 2016-08-12T07:06:00.727 回答