2016-11-30 1 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 документа **] (http://stackoverflow.com/documentation/matlab/2383/undocumented-features#t=201612020612571995264), A немного больше объяснений и хороший скриншот должен это сделать. – thewaywewalk

+0

Я добавил [пример] (http://stackoverflow.com/documentation/matlab/2383/undocumented-features/26052/contour-plots-customise-the-text-labels) – matlabgui

Смежные вопросы