2016-11-30 3 views
3

Betrachten Sie die folgende MWE ein Konturdiagramm zu erstellen:Ist es möglich, Konturplots in wissenschaftlicher Notation zu beschriften?

close all 
[X,Y]=meshgrid(0:100,0:100); 
Z=(X+Y.^2)*1e10; 
[C,h]=contour(X,Y,Z); 
h.ShowText='on'; 

jedoch die Etiketten zeigen immer eine volle integer Notation der Konturen. Gibt es eine vernünftige Möglichkeit, dieses Verhalten zu ändern? (etwa vergleichbar wie MATLAB Variablen im Befehlsfenster angezeigt wird, oder eine Zwangs wissenschaftliche Schreibweise)

enter image description here

Antwort

6

Sie können dies die undokumentierte MarkedClean Ereignis mit tun.

Leider aktualisiert Matlab den Text jedes Mal, wenn das Diagramm neu gezeichnet wird (z. B. Größe ändern) - Sie müssen also einen Listener hinzufügen, um sie jedes Mal zu aktualisieren - daher hören Sie auf dieses besondere Ereignis.

function test 
    figure 
    [X,Y]=meshgrid(0:100,0:100); 
    Z=(X+Y.^2)*1e10; 
    [C,h]=contour(X,Y,Z); 
    h.ShowText='on'; 
    % add a listener and call your new format function 
    addlistener(h,'MarkedClean',@(a,b)ReFormatText(a)) 
end 
function ReFormatText(h) 
    % get all the text items from the contour 
    t = get(h,'TextPrims'); 
    for ii=1:length(t) 
    % get the current value (Matlab changes this back when it 
    % redraws the plot) 
    v = str2double(get(t(ii),'String')); 
    % Update with the format you want - scientific for example 
    set(t(ii),'String',sprintf('%0.3e',v)); 
    end 
end 
+1

Ich fühle mich diese Antwort wäre für die gut geeignet sein [** undokumentiert doc featues **] (http://stackoverflow.com/documentation/matlab/2383/undocumented-features#t=201612020612571995264), ein etwas mehr Erklärung und ein schöner Screenshot sollte es tun. – thewaywewalk

+0

Ich habe ein [Beispiel] hinzugefügt (http://stackoverflow.com/documentation/matlab/2383/undocumented-features/26052/contour-plots-customise-the-text-labels) – matlabgui

Verwandte Themen