小归海爱吃小海龟 2023-03-30 12:00 采纳率: 100%
浏览 53
已结题

关于MATLAB的contourf和contour函数同时使用的问题

在MATLAB上同时使用contour和contourf函数,会导致前一个等值线图的颜色发生变化。
如若先使用contourf画等值线图,结果如下:

img

然后使用contour函数画等值线,结果如下:

img

可以看到画完等值线后一开始画的填充等值线图变成了同一种颜色,而且第二个等值线图的线很乱,网上也没找到特别好的方法, 请问有什么方法可以解决呢?以下是我的代码

%用来画分潮等值线图的

clear,clc;
addpath E:\毕业论文资料\数据

sname={'三灶' '灯笼山' '竹银' '甘竹' '马口'};
fname={'\fontname{times new roman}(a) \fontname{宋体}三灶' '\fontname{times new roman}(b) \fontname{宋体}灯笼山'...
    '\fontname{times new roman}(c) \fontname{宋体}竹银'...
    '\fontname{times new roman}(d) \fontname{宋体}甘竹' '\fontname{times new roman}(e) \fontname{宋体}马口'};
data=readmatrix('马口、三水逐时流量(1966-2016).xlsx','NumHeaderLines',1);
LL_t=datenum(data(:,1),data(:,2),data(:,3),data(:,4),data(:,5),data(:,6));
[LLyear] = datevec(LL_t);
MK_Q=data(:,7);
load('三灶.mat')
w=2*pi./18.61;
dtm=[-10 4.5 25 81 129]+10;
nd=0:1:139;

% byear=[2003 1993 1993 1990 1994];
byear=[1991 1999 2000 1986 1993];

t=1966:2016;

for i = 1 : 5
    load([sname{i} 'harmony_skewness.mat']);
    et=find(t==byear(i)-1);
    year=1966;j=1;
    while(year<=2016)
        sn=find(LL_t==datenum(year,0,0,0,0,0));
        en=find(LL_t==datenum(year,12,31,0,0,0));
        if isempty(sn)
            sn=1;
        end
        Y1(i,j)=nanmean(Ht(1,sn:en),2);
        Y2(i,j)=nanmean(Ht(2,sn:en),2);
        Y3(i,j)=nanmean(Ht(3,sn:en),2);
        Y4(i,j)=nanmean(Ht(5,sn:en),2);

        X1(i,j)=nanmean(Gt(1,sn:en),2);
        X2(i,j)=nanmean(Gt(2,sn:en),2);
        X3(i,j)=nanmean(Gt(3,sn:en),2);
        X4(i,j)=nanmean(Gt(5,sn:en),2);

        year=year+1;
        j=j+1;
    end

end

%% smooth
nt=1966:0.1:2016;
[xq,yq] = meshgrid(nt,nd);
YY1 = griddata(t,dtm,Y1,xq,yq,'natural');
YY2 = griddata(t,dtm,Y2,xq,yq,'natural');
YY3 = griddata(t,dtm,Y3,xq,yq,'natural');
YY4 = griddata(t,dtm,Y4,xq,yq,'natural');

XX1 = griddata(t,dtm,X1,xq,yq);


%% Plot

figure('unit','centimeters','position',[.1,.1,23,23],'color','w')
ha=tight_subplot(2,2,4,[.05 .06],[.08,.03],[.08 .05]);

axes(ha(1))
contourf(nt,nd,YY1,'EdgeColor','none');hold on;
contour(nt,nd,XX1)
colorbar

axes(ha(2))
contourf(nt,nd,YY2,'EdgeColor','none')
colorbar

axes(ha(3))
contourf(nt,nd,YY3,'EdgeColor','none')
colorbar

axes(ha(4))
contourf(nt,nd,YY4,'EdgeColor','none')
colorbar


  • 写回答

2条回答 默认 最新

  • H3T 2023-03-30 13:41
    关注

    在绘制等值线图之前将绘图区域的colormap设置为默认值:

    clear,clc;
    addpath E:\毕业论文资料\数据
    sname={'三灶' '灯笼山' '竹银' '甘竹' '马口'};
    fname={'\fontname{times new roman}(a) \fontname{宋体}三灶' '\fontname{times new roman}(b) \fontname{宋体}灯笼山'...
        '\fontname{times new roman}(c) \fontname{宋体}竹银'...
        '\fontname{times new roman}(d) \fontname{宋体}甘竹' '\fontname{times new roman}(e) \fontname{宋体}马口'};
    data=readmatrix('马口、三水逐时流量(1966-2016).xlsx','NumHeaderLines',1);
    LL_t=datenum(data(:,1),data(:,2),data(:,3),data(:,4),data(:,5),data(:,6));
    [LLyear] = datevec(LL_t);
    MK_Q=data(:,7);
    load('三灶.mat')
    w=2*pi./18.61;
    dtm=[-10 4.5 25 81 129]+10;
    nd=0:1:139;
    % byear=[2003 1993 1993 1990 1994];
    byear=[1991 1999 2000 1986 1993];
    t=1966:2016;
    for i = 1 : 5
        load([sname{i} 'harmony_skewness.mat']);
        et=find(t==byear(i)-1);
        year=1966;j=1;
        while(year<=2016)
            sn=find(LL_t==datenum(year,0,0,0,0,0));
            en=find(LL_t==datenum(year,12,31,0,0,0));
            if isempty(sn)
                sn=1;
            end
            Y1(i,j)=nanmean(Ht(1,sn:en),2);
            Y2(i,j)=nanmean(Ht(2,sn:en),2);
            Y3(i,j)=nanmean(Ht(3,sn:en),2);
            Y4(i,j)=nanmean(Ht(5,sn:en),2);
            X1(i,j)=nanmean(Gt(1,sn:en),2);
            X2(i,j)=nanmean(Gt(2,sn:en),2);
            X3(i,j)=nanmean(Gt(3,sn:en),2);
            X4(i,j)=nanmean(Gt(5,sn:en),2);
            year=year+1;
            j=j+1;
        end
    end
    %% smooth
    nt=1966:0.1:2016;
    [xq,yq] = meshgrid(nt,nd);
    YY1 = griddata(t,dtm,Y1,xq,yq,'natural');
    YY2 = griddata(t,dtm,Y2,xq,yq,'natural');
    YY3 = griddata(t,dtm,Y3,xq,yq,'natural');
    YY4 = griddata(t,dtm,Y4,xq,yq,'natural');
    XX1 = griddata(t,dtm,X1,xq,yq);
    %% Plot
    figure('unit','centimeters','position',[.1,.1,23,23],'color','w')
    ha=tight_subplot(2,2,4,[.05 .06],[.08,.03],[.08 .05]);
    axes(ha(1))
    contourf(nt,nd,YY1,'EdgeColor','none');
    colormap default % 设置colormap为默认值
    hold on;
    contour(nt,nd,XX1)
    colorbar
    axes(ha(2))
    contourf(nt,nd,YY2,'EdgeColor','none')
    colormap default % 设置colormap为默认值
    colorbar
    axes(ha(3))
    contourf(nt,nd,YY3,'EdgeColor','none')
    colormap default % 设置colormap为默认值
    colorbar
    axes(ha(4))
    contourf(nt,nd,YY4,'EdgeColor','none')
    colormap default % 设置colormap为默认值
    colorbar
    

    如果答案对您有所帮助,望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 3月30日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)