輪廓圖 - 自定義文字標籤
在輪廓上顯示標籤時,Matlab 不允許你控制數字的格式,例如更改為科學記數法。
單個文字物件是普通文字物件,但是如何獲取它們是未記錄的。你可以從輪廓控制代碼的 TextPrims
屬性訪問它們。
figure
[X,Y]=meshgrid(0:100,0:100);
Z=(X+Y.^2)*1e10;
[C,h]=contour(X,Y,Z);
h.ShowText='on';
drawnow();
txt = get(h,'TextPrims');
v = str2double(get(txt,'String'));
for ii=1:length(v)
set(txt(ii),'String',sprintf('%0.3e',v(ii)))
end
注意 :你必須新增 drawnow
命令以強制 Matlab 繪製輪廓,txt 物件的數量和位置僅在實際繪製輪廓時確定,因此僅建立文字物件。
繪製輪廓時建立 txt 物件的事實意味著每次重繪繪圖時都會重新計算它們(例如圖形調整大小)。要管理這個,你需要聽聽 undocumented event
MarkedClean
:
function customiseContour
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