可以控制 contourf 中的颜色吗?
Is controlling the colors in contourf possible?
下午好,
我有这段代码,我想在其中指定三个彩色区域。一种是当最终函数 C 和 C1 合并在一起时(如代码所示)小于 0,在 0 和 1 之间,以及大于 1 时。在代码中,我需要合并的 contourf 图最终合并和定义在三个简单的区域。结果如下图所示。一开始您可能会认为最主要的颜色是亮蓝色,但是当您查看 contourf 图和颜色条时,由于某种原因它们不匹配。谢谢您的帮助。向管理员道歉没有将此问题作为一个单独的问题发布。
[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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
好的,代码有 2 个主要问题。
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]);
[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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
好的,代码有 2 个主要问题。
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]);