0

温度、導電率、圧力を測定する水中グライダーのデータを大幅に編集しました。そこから、塩分、密度、シグマ (シグマ = 密度 - 1000) が得られます。楽器はあまりうまくサンプリングできなかったため、編集が重くなりました。ポスター用に「きれいな」等高線図を作成する必要があります。これは出版物ではないので、フィルタリングやスムージングの量については心配していません。

シグマ (密度) の等高線に問題があります。以下を参照してください。

シグマと補間シグマの等高線図

黒い等高線はシグマの塗りつぶされた等高線をたどるはずですが、見た目が非常に悪いです。グリッド化が行われる前に、データは 1 m ずつビニングされました。プロットを生成するために使用されるコードは次のとおりです。

この画像を生成するために使用されるコードは次のとおりです

 % load data
 load Matlab_data
 maxy = 50;

t = 1;
Tstep = t./24./60; % Grid data on t minute time intervals
X1 = time(1)-Tstep:Tstep:time(end)+Tstep; 
Y1 = 0:1:maxy; % Grid data on 1 meter depth intervals

ygrid = [' Depth grid: ' num2str(diff(Y1(1:2)))];
xgrid = [' Time grid: ' num2str(diff(X1(1:2)))];

[X,Y]= meshgrid(X1,Y1);
bad_vals = isnan(sal) .* ~isfinite(sal) .* isnan(press); % don't include NaNs or funky imaginary salinities in the contours
vals = find(bad_vals == 0);

Zd = griddata(time(vals),depth(vals),density(vals),X,Y);
Zt = griddata(time(vals),depth(vals),temp(vals),X,Y);
Zs = griddata(time(vals),depth(vals),sal(vals),X,Y);
Zst = griddata(time(vals),depth(vals),sigmat(vals),X,Y); 

% Interpolate over gaps
vst = interp1gap(sigmat);
vs = interp1gap(sal);
% Grid interpolated salinity and sigma data
Zst_interp = griddata(time(vals),depth(vals),vst(vals),X,Y);
Zs_interp = griddata(time(vals),depth(vals),vs(vals),X,Y);

 %% Contour Plot
  % Set up the figure
  figure3=figure('Position', [2000, 50, 1500, 500]);
  clf
  colormap(jet);

% Temperature
ax1 = subplot(2, 1,1);
  [c,h] = contourf(X,Y,Zst,50,'linestyle','none'); %,[4:.5:9],'linestyle','none');
  cRange = caxis;
   hold on
  [c2,h2] = contour(X,Y,Zst,[24 24.5 25],'color','k'); %,[22:.5:26.5],'linewidth',1.5,'color','k');
  clabel(c2,h2,'fontsize',10,'labelspacing',150);
  set(h2,'linewidth',1)
  hc = colorbar;
  colormap(jet);

  datetick('x','mm/dd','keeplimits','keepticks');

  grid on;
  box on
  pos = get(gca,'position');
  set(gca,'YDir','reverse')%,'position',[pos(1) pos(2) pos(3)-.06 pos(4)]);
  set(gca,'xlim',[time(1)+.5./24 time(end)-.5./24],...
      'ylim',[0 maxy],'fontsize',8,'xminortick','on','yminortick','on');
  set(get(hc,'ylabel'),'string','Sigma-Theta (kg m^-^3)','rotation',270,'verticalalignment','bottom');
  ylabel('Ocean Depth (m)');
  xlabel('Date');
  %title(['Sigma Theta (kg m^-^3) -' strrep(tag,'_','\_')], 'fontweight', 'bold','FontSize',12)
  title(['Sigma Theta (kg m^-^3) :' ygrid xgrid ], 'fontweight', 'bold','FontSize',12)    

ax2 = subplot(2, 1,2);
  %h=pcolor(X,Y,Zst);
  [c,h] = contourf(X,Y,Zst_interp,50,'linestyle','none'); %,[4:.5:9],'linestyle','none');
  shading interp
  hc = colorbar;
  cRange = caxis;
  hold on
  [c2,h2] = contour(X,Y,Zst_interp,[24 24.5 25],'color','k'); %,[22:.5:26.5],'linewidth',1.5,'color','k');
  clabel(c2,h2,'fontsize',10,'labelspacing',150);
  set(h2,'linewidth',1)
  hc = colorbar;
  colormap(jet);
  caxis(cRange);

  datetick('x','mm/dd','keeplimits','keepticks');

  grid on;
  box on
  pos = get(gca,'position');
  set(gca,'YDir','reverse')%,'position',[pos(1) pos(2) pos(3)-.06 pos(4)]);
  set(gca,'xlim',[time(1)+.5./24 time(end)-.5./24],...
      'ylim',[0 maxy],'fontsize',8,'xminortick','on','yminortick','on');
  set(get(hc,'ylabel'),'string','Sigma-Theta (kg m^-^3)','rotation',270,'verticalalignment','bottom');
  ylabel('Ocean Depth (m)');
  xlabel('Date');
 % title(['Sigma Theta (kg m^-^3) -' strrep(tag,'_','\_')], 'fontweight', 'bold','FontSize',12)

  title(['Sigma Theta interp1gap (kg m^-^3) :' ygrid xgrid ], 'fontweight', 'bold','FontSize',12)

助けてください!私には2つの問題があります...最初の最も明白なものは、醜い黒い輪郭線です。これらは、塗りつぶされた輪郭の周りをうまく「流れる」はずです。誰かがこれらをスムーズにする方法について経験や提案を持っている場合は、可能であればコードを添えて教えてください。

2 番目の問題は下のプロットにあります。データのギャップを埋める必要があります (元の不良データを編集したため)。File exchange で利用可能な関数 interp1gap を使用しましたが、データをより深い深度まで補間することもあり、これは望ましくありません。水平方向の隣人を選択して埋めるなど、ギャップを埋めたいだけです。

これを修正するための提案があれば教えてください!データ (Matlab_data.mat) を添付しました。これには、時間、深さ、塩分 (塩分)、シグマット、圧力、温度、および密度が含まれます。

これはグリッディングの問題ですか?できるだけ具体的に記入してください。これを調べる時間があれば、コードや図を教えていただければ幸いです。

データは利用可能なドロップ ボックスhttps://www.dropbox.com/s/mjd8f9bzdvwddk5/Matlab_data.mat?dl=0

事前にどうもありがとうございました!

4

0 に答える 0