2016-11-30 69 views
3

考慮以下MWE創建一個等高線圖:是否可以用科學計數法標註等值線圖?

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

然而,標籤總是顯示輪廓的一個完整的整數符號。 有沒有合理的方法來改變這種行爲?(比如說,可比MATLAB如何顯示變量在命令窗口,或強制科學記數法)

enter image description here

回答

6

您可以使用無證MarkedClean事件做到這一點。

不幸的是,Matlab每次更新圖形都會重繪圖形(例如圖形大小調整) - 所以您需要添加一個偵聽器來在每次發生時更新它們 - 因此您爲什麼要監聽這個特殊事件。

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

我覺得這個答案將是非常適合的[**無證featues DOC **](http://stackoverflow.com/documentation/matlab/2383/undocumented-features#t=201612020612571995264),一多一點解釋和一個漂亮的截圖應該做到這一點。 – thewaywewalk

+0

我已經添加了一個[示例](http://stackoverflow.com/documentation/matlab/2383/undocumented-features/26052/contour-plots-customise-the-text-labels) – matlabgui