A mysterious problem regarding NaNs, imagesc and subplots.
    6 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
Hi,
I am working on a project where I need to plot an error rate as a function of two parameters as both surface and imagesc. Since I do not have results for all combinations of the parameters, my matrix of error rates contains quite a few NaNs. I need to distinguish the NaNs from the zeros, and found a neat method at the end of this thread for omitting them from the imagesc plot:
    h=imagesc(A);
    set(h,'alphadata',~isnan(A))
This worked like a charm at first, but then I needed to change the axis on the surface plot (which is in a separate subplot in the same figure) to a log scale, and suddenly the NaNs in the imagesc plot pop back up. See for yourself:
    % Initialize error matrix A with random values, and some NaNs.
    A = rand(10,10);
    A(A<1/3) = NaN;
    % Here the NaNs show up as white
    figure
    subplot(1,2,1);
    surf(A)
    subplot(1,2,2);
    h=imagesc(A);
    set(h,'alphadata',~isnan(A))
    % Here they don't
    figure
    subplot(1,2,1);
    surf(A)
    set(gca,'XScale','log');
    subplot(1,2,2);
    % set(gca,'XScale','linear'); % I tried this to no avail.
    h=imagesc(A);
    set(h,'alphadata',~isnan(A))
I have no idea why this happens! Why would the axis scale on one subplot influence the other?
Is this a bug in Matlab, or am I doing something wrong here?
Any input would be much appreciated.
0 Kommentare
Akzeptierte Antwort
  Doug Hull
      
 am 13 Jun. 2011
        There are three renderers in MATLAB. The only one that handles transparency is OPENGL. Unfortunately, OPENGL does not handle log scale.
3 Kommentare
Weitere Antworten (2)
  Richard
    
 am 14 Jun. 2011
        A workaround is to use a surface with flat shading (the default) and just view it from above. You do have to do a bit of extra work to get a similar output as imagesc gives you.
    % Initialize error matrix A with random values, and some NaNs.
    A = rand(10,10);
    A(A<1/3) = NaN;
    % Here the NaNs show up as white
    figure
    subplot(1,2,1);
    surf(A)
    subplot(1,2,2);
    surf(0.5:(size(A, 2)+0.5), 0.5:(size(A, 1)+0.5), ...
        zeros(size(A)+1), A, 'edgecolor', 'none');
    axis('tight');
    view(2);
    grid('off');
    box('on');
    set(gca, 'YDir', 'reverse');
  Jordan Mertes
 am 22 Jun. 2011
        I'm having a similar problem. I turn my NaN to transparent but when I do this the left and bottom axis box disappear. I can't figure out how to get them back. I have tried with the other renderers but one of them makes the NaNs blue again and the other doesn't do anything. Any thoughts on this?
Thanks
0 Kommentare
Siehe auch
Kategorien
				Mehr zu Graphics Performance finden Sie in Help Center und File Exchange
			
	Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




