提取圖資料
有幾次,我有一個有趣的人物,但我丟失了對其資料的訪問許可權。此示例顯示瞭如何從圖中獲取提取資訊的技巧。
關鍵功能是 findobj 和 get 。 findobj 返回給定物件的屬性或屬性的物件的處理程式,例如 Type
或 Color
等。一旦找到了行物件, get 就可以返回屬性所持有的任何值。事實證明,Line
物件包含以下屬性中的所有資料:XData
,YData
和 ZData
; 除非圖中包含 3D 圖,否則最後一個通常為 0。
下面的程式碼建立了一個示例圖,顯示了 sin 函式,閾值和圖例兩行
t = (0:1/10:1-1/10)';
y = sin(2*pi*t);
plot(t,y);
hold on;
plot([0 0.9],[0 0], 'k-');
hold off;
legend({'sin' 'threshold'});
findobj 的第一次使用會向兩行返回兩個處理程式:
findobj(gcf, 'Type', 'Line')
ans =
2x1 Line array:
Line (threshold)
Line (sin)
為了縮小結果, findobj 還可以使用邏輯運算子 -and
,-or
和屬性名稱的組合。例如,我可以找到一個線物件,其 DiplayName
是 sin
並讀取其 XData
和 YData
。
lineh = findobj(gcf, 'Type', 'Line', '-and', 'DisplayName', 'sin');
xdata = get(lineh, 'XData');
ydata = get(lineh, 'YData');
並檢查資料是否相等。
isequal(t(:),xdata(:))
ans =
1
isequal(y(:),ydata(:))
ans =
1
同樣,我可以通過排除黑線(閾值)來縮小我的結果:
lineh = findobj(gcf, 'Type', 'Line', '-not', 'Color', 'k');
xdata = get(lineh, 'XData');
ydata = get(lineh, 'YData');
並且最後一次檢查確認從該圖中提取的資料是相同的:
isequal(t(:),xdata(:))
ans =
1
isequal(y(:),ydata(:))
ans =
1