Changeset 6492


Ignore:
Timestamp:
11/04/10 09:12:09 (14 years ago)
Author:
Mathieu Morlighem
Message:

MUCH better plot_overlay, colorbar looks nices, caxis working,... etc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/model/plot/plot_overlay.m

    r6489 r6492  
    1919end
    2020
    21 % radar power {{{1
     21%Get xlim and ylim (used to extract radar image)
     22xlim=getfieldvalue(options,'xlim',[min(md.x) max(md.x)]);
     23ylim=getfieldvalue(options,'ylim',[min(md.y) max(md.y)]);
     24
     25%radar power {{{1
    2226if ~any(isnan(md.sarxm)) & ~any(isnan(md.sarym)) & ~any(isnan(md.sarpwr)),
    2327        disp('plot_overlay info: the radar image held by the model is being used');
    2428else
    25         %t1=clock; fprintf('%s','Extracting radar image...');
    2629        disp('Extracting radar image...');
    27         xlim=getfieldvalue(options,'xlim',[min(x) max(x)])/getfieldvalue(options,'unit',1);
    28         ylim=getfieldvalue(options,'ylim',[min(y) max(y)])/getfieldvalue(options,'unit',1);
    2930        md=radarpower(md,xlim,ylim,getfieldvalue(options,'highres',0));
    30         %t2=clock;fprintf('%s\n',[' done (' num2str(etime(t2,t1)) ' seconds)']);
    3131end%}}}
    32 % InterpFromMeshToGrid -> data_grid {{{1
    33 redo=1;
    34 if (ischar(data) & isstruct(md.mesh2grid_parameters) & ismember(data,mesh2grid_parameters)),
    35         choice=input(['mesh2grid has already been called for the parameter ''' data '''. Do you want to call it again (y/n)?'],'s');
    36         if strcmp(choice,'y')
    37                 disp('use previous mesh2grid result');
    38                 x_m=md.mesh2grid_x_m;
    39                 y_m=md.mesh2grid_y_m;
    40                 data_grid=md.mesh2grid_data;
    41                 redo=0;
    42         end
     32%InterpFromMeshToGrid -> data_grid {{{1
     33cornereast =min(xlim);
     34cornernorth=max(ylim);
     35xspacing=(max(xlim)-min(xlim))/(length(md.sarxm));
     36yspacing=(max(ylim)-min(ylim))/(length(md.sarym));
     37nlines=length(md.sarym);
     38ncols =length(md.sarxm);
     39disp('Interpolating data on grid...');
     40[x_m y_m data_grid]=InterpFromMeshToGrid(elements,x,y,data,cornereast,cornernorth,xspacing,yspacing,nlines,ncols,NaN);
     41
     42%Process data_grid
     43if exist(options,'caxis'),
     44        caxis_opt=getfieldvalue(options,'caxis');
     45        data_grid(find(data_grid<caxis_opt(1)))=caxis_opt(1);
     46        data_grid(find(data_grid>caxis_opt(2)))=caxis_opt(2);
     47        data_min=caxis_opt(1);
     48        data_max=caxis_opt(2);
     49else
     50        data_min=min(data_grid(:));
     51        data_max=max(data_grid(:));
    4352end
    44 if redo,
    45         %apply caxis if required
    46         if exist(options,'caxis'),
    47                 caxis_opt=getfieldvalue(options,'caxis');
    48                 data(find(data<caxis_opt(1)))=caxis_opt(1);
    49                 data(find(data>caxis_opt(2)))=caxis_opt(2);
    50         end
     53data_nan=find(isnan(data_grid));
    5154
    52         %use InterpFromMeshToGrid to get an gridded data to display using imagesc
    53         xlim=getfieldvalue(options,'xlim',[min(x) max(x)]);
    54         ylim=getfieldvalue(options,'ylim',[min(y) max(y)]);
    55         cornereast =min(xlim);
    56         cornernorth=max(ylim);
    57         xspacing=(max(xlim)-min(xlim))/(length(md.sarxm));
    58         yspacing=(max(ylim)-min(ylim))/(length(md.sarym));
    59         nlines=length(md.sarym);
    60         ncols =length(md.sarxm);
    61         t1=clock; fprintf('%s','Interpolating data on grid...');
    62         [x_m y_m data_grid]=InterpFromMeshToGrid(elements,x,y,data,cornereast,cornernorth,xspacing,yspacing,nlines,ncols,getfieldvalue(options,'cutoff',1.5));
    63         t2=clock;fprintf('%s\n',[' done (' num2str(etime(t2,t1)) ' seconds)']);
    64 end%}}}
    65 %Generate RGB image{{{1
     55%}}}
     56%Generate HSV image{{{1
    6657
    67 %Build hsv color image from radar and results
    68 radar=md.sarpwr;
     58%options
    6959contrast=getfieldvalue(options,'contrast',1); 
    70 radar=radar.^(contrast);
    7160transparency=getfieldvalue(options,'alpha',1.5);  %Rignot's setting: 1.5
    72 cutoff=getfieldvalue(options,'cutoff',1.5);       %Rignot's setting: 1.5
     61data_coba=linspace(data_min,data_max,256);        %prepare colorbar (256 values between min and max)
     62data_grid(data_nan)=data_min;
    7363
    74 %intensity
     64%hue (H)
     65h_data=bytscl(data_grid)/(255+1);           %scale between 0 and 1 (log applied in processdata)
     66h_coba=bytscl(data_coba)/(255+1);           %scale between 0 and 1
     67%saturation (S)
     68s_data=(0.5+10.^data_grid/125)/transparency;s_data(find(s_data>1))=1;s_data(find(s_data<0))=0;
     69s_coba=(0.5+10.^data_coba/125)/transparency;s_coba(find(s_coba>1))=1;s_coba(find(s_coba<0))=0;
     70s_data(data_nan)=0;
     71%intensity (V)
     72radar=(md.sarpwr).^(contrast);
    7573v_data=radar/max(radar(:)); %For the principla image, use radar power as intensity
    7674v_coba=ones(256,1);         %For the colorbar: maximal intensity
    7775
    78 %hue
    79 data_grid(find(data_grid<cutoff))=cutoff;   %cut all values below cutoff
    80 data_coba=linspace(max(min(data(:)),cutoff),max(max(data(:)),cutoff),256);%prepare colorbar (256 values between min and max)
    81 h_data=bytscl(data_grid)/(255+1);           %scale between 0 and 1 (log applied in processdata)
    82 h_coba=bytscl(data_coba)/(255+1);           %scale between 0 and 1
    83 
    84 %saturation
    85 s_data=(0.5+10.^data_grid/125)/transparency;s_data(find(s_data>1))=1;s_data(find(s_data<0))=0;
    86 s_coba=(0.5+10.^data_coba/125)/transparency;s_coba(find(s_coba>1))=1;s_coba(find(s_coba<0))=0;
    87 s_data(find(data_grid==cutoff))=0;
    88 s_coba(find(data_coba==cutoff))=0;
    89 
    90 %Transform hsv to rgb
     76%}}}
     77%Transform HSV to RGB {{{1
    9178image_hsv=zeros(size(data_grid,1),size(data_grid,2),3);
    9279image_hsv(:,:,1)=h_data;
     
    114101
    115102%last step: mesh overlay?
    116 if exist(options,'edgecolor')
     103if exist(options,'edgecolor'),
    117104        A=elements(:,1); B=elements(:,2); C=elements(:,3);
    118105        patch( 'Faces', [A B C], 'Vertices', [x y z],'FaceVertexCData', [1 1 1],'FaceColor','none','EdgeColor',getfieldvalue(options,'edgecolor'));
    119106end
    120107
    121 %Apply options {{{1
    122108%Apply options, without colorbar and without grid
    123109iscolorbar=getfieldvalue(options,'colorbar',1);
    124 options=changefieldvalue(options,'colorbar',0);
    125 options=addfielddefault(options,'axis','equal off');
    126 options=addfielddefault(options,'colorbarpos',[0.80 0.70 0.02 0.15]);
     110options=changefieldvalue(options,'colorbar',0);                %do not create colorbar, we will take care of it
     111options=changefieldvalue(options,'caxis',[data_min data_max]); %force caxis so that the colorbar is ready
     112options=addfielddefault(options,'axis','equal off');           %default axis
    127113applyoptions(md,data,options);
    128114
    129 %colorbar
     115%Create Colorbar {{{1
    130116if iscolorbar,
    131117
    132         %create colorbar with correct colors and position
    133         %colorbar_rgb=buildoverlaycolorbar(md,data,getfieldvalue(options,'aplha',1.5));
    134         colorbar_handle=colorbar;
    135         colorbar_image_handle=get(colorbar_handle,'Children');
    136         set(colorbar_image_handle,'CData',colorbar_rgb);
    137         set(colorbar_handle,'Position',getfieldvalue(options,'colorbarpos'));
    138         set(colorbar_handle,'FontSize',getfieldvalue(options,'colorbarfontsize',14));
     118        h=colorbar;
     119        set(h,'FontSize',getfieldvalue(options,'colorbarfontsize',14));
     120        set(h,'YColor',getfieldvalue(options,'FontColor','k'));
     121        h2=get(h,'Children');
     122        set(h2,'CData',colorbar_rgb);
     123        %colormap([colorbar_rgb(:,1,1) colorbar_rgb(:,1,2) colorbar_rgb(:,1,3)]);
    139124
    140         %modify ticks.
    141         scalestring=get(colorbar_handle,'YTickLabel');
    142         numvalues=length(get(colorbar_handle,'YTick'));
    143 
    144         scalestring=[];
    145         scaleminmax=[max(min(data),cutoff) max(data)];
    146         for i=1:numvalues,
    147                 fraction=(i-1)/(numvalues-1);
    148                 scalevalues(i)=scaleminmax(1)+(scaleminmax(2)-scaleminmax(1))*fraction;
    149                 if exist(options,'log'),
    150                         logvalue=getfieldvalue(options,'log');
    151                         scalestring=[scalestring; sprintf('%-8.4g',round_ice(logvalue^scalevalues(i),2) )];
    152                 else
    153                         scalestring=[scalestring; sprintf('%-8.4g',round_ice(scalevalues(i),2) )];
    154                 end
     125        if exist(options,'colorbarpos'),
     126                set(h,'Position',getfieldvalue(options,'colorbarpos'));
    155127        end
    156         set(colorbar_handle,'YTickLabel',scalestring);
    157         set(colorbar_handle,'YColor',getfieldvalue(options,'FontColor','k'));
    158128        if exist(options,'colorbartitle'),
    159129                backup=gca;
     
    163133                axes(backup);
    164134        end
     135
    165136end%}}}
Note: See TracChangeset for help on using the changeset viewer.