您將需要一個函數來執行高度&時間到緯度&的映射,然後根據映射的值設置限制。
下面的函數來完成這個工作:
function syncLimits(masterAxes,slaveAxes)
% Sync a slave axes that is plot related data.
% Assumes each data point in slave corresponds with the data point in the
% master at the same index.
% Find limits of controlling plot
xRange = xlim(masterAxes);
% Get x data
x1Data = get(get(masterAxes,'children'),'XData');
% Find data indices corresponding to these limits
indices = x1Data >= xRange(1) & x1Data <= xRange(2);
if any(indices)
% Set the limits on the slave plot to show the same data range (based
% on the xData index)
x2Data = get(get(slaveAxes,'children'),'XData');
y2Data = get(get(slaveAxes,'children'),'YData');
minX = min(x2Data(indices));
maxX = max(x2Data(indices));
minY = min(y2Data(indices));
maxY = max(y2Data(indices));
% Set limits +- eps() so that if a single point is selected
% x/ylim min/max values aren't identical
xlim(slaveAxes,[ minX - eps(minX) maxX + eps(maxX) ]);
ylim(slaveAxes,[ minY - eps(minY) maxY + eps(maxY) ]);
end
end
然後,您可以得到高度對時間的情節調用此函數時,它被放大或平移。
height = [10,9,4,6,3];
time = [1,2,3,4,5];
latitude = [10,20,30,40,50];
longitude = [11,12,13,14,15];
% Plot Height v Time
h1 = figure;
a1 = gca;
plot(time,height);
title('Height v Time');
% Plot Lat v Long
figure;
a2 = gca;
plot(longitude, latitude);
title('Lat v Long')
% Set-up Callback to sync limits
zH = zoom(h1);
pH = pan(h1);
set(zH,'ActionPostCallback',@(figHandle,axesHandle) syncLimits(axesHandle.Axes,a2));
set(pH,'ActionPostCallback',@(figHandle,axesHandle) syncLimits(axesHandle.Axes,a2));
如果通過函數直接生成您的地塊作爲您能巢syncLimits功能和使用的時間,經緯度&長數據的代碼會更簡單。您也可以將這些數據傳遞到syncLimits函數中,該函數再少一點代碼,但只需編寫一次syncLimits(並且我已經完成了它!)。
我並不想要經度數組與時間數組相同。你的答案現在仍然有效嗎? – Edd
如果有某種方式,我可以從一個繪圖中獲得極限,我可以通過某種onClick函數更新其他繪圖 – Edd
在我看來,您可以處理以下兩種方法之一。首先,您可以按照您的建議進行操作,並在每個圖中插入一個回調函數,以獲得一個極限,然後適當縮放另一個。其次,如果限制總是被縮放或相互移動,您可以定義一個比例和/或移位參數,並將其應用於其中一個「x」變量,然後使用「get」和「set」更改軸標籤'。有了這個選項,我不知道鏈接軸是否也會鏈接這些屬性,而我的MATLAB副本正在工作,所以我無法測試它。 – craigim