matlab - 在 Matlab 子图中链接不同的数据源
问题描述
我想将纬度和经度数据与另一种类型的数据(速度)一起绘制,记录在每个纬度经度点。这基本上相当于
figure()
subplot(1,2,1); plot(lat,lon);
subplot(1,2,2); plot(t,y);
其中所有向量具有相同的长度,并且t
是每个记录的时间戳(以秒为单位)。我希望能够链接数据,这样当我在第一个子图中突出显示数据时,相应的数据会在第二个子图中突出显示(反之亦然)。
然而,因为这两个子图没有共同的数据源(至少没有名字),我很难开始linkdata
工作。
这是我尝试过的(没有linkdata
)
function linkedexasmple()
close all
t = linspace(-2,2,100);
lat = sin(t);
lon = cos(t);
x = t;
y = exp(t);
M = [lat',lon',x',y'];
figure()
whos
subplot(1,2,1)
plot(M(:,1),M(:,2),'-x','XDataSource','M(:,1)','YDataSource','M(:,2)');
subplot(1,2,2)
plot(M(:,3),M(:,4),'-x','XDataSource','M(:,3)','YDataSource','M(:,4)');
%linkdata on
%linkdata showdialog
end
但是,如果我 toggle linkdata on
,情节就完全改变了。
如何在启用链接的同时保留原始图?
最后一点:我显然想稍后用参数 ( lat
, lon
, x
, y
) 调用该函数。但是对于这个 MWE,我认为这样会更容易。
解决方案
您可以将未记录的BrushData
属性与画笔的ActionPostCallback
. 该BrushData
属性是一个s 和s的uint8
数组,其中s 表示选择的数据点。在回调函数中,当两个子图中的任何一个被“刷”时,同时设置它们的 。0
1
1
BrushData
function linkedexample()
t = linspace(-2,2,100);
lat = sin(t);
lon = cos(t);
x = t;
y = exp(t);
fig = figure();
subplot(1,2,1)
p1 = plot(lat,lon);
subplot(1,2,2)
p2 = plot(x,y);
% Bind callback function with the brush
b = brush(fig);
b.ActionPostCallback = {@onBrushAction};
% callback function
function onBrushAction(~, eventdata)
set(p1, 'BrushData', eventdata.Axes.Children.BrushData)
set(p2, 'BrushData', eventdata.Axes.Children.BrushData)
end
end
这两篇文章,关于Undocumented Matlab的“访问绘制的绘图数据”及其工作人员的这篇Mathwork 帖子,提供了有关和的更多信息。BrushData
ActionPostCallback
推荐阅读
- python-3.x - 从没有管理员或 cmd 的记忆棒安装 python 模块
- sql-server - 如何在 vb.net 的 cmd.Parameters.AddWithValue("@" & Variable & "" , "") 中指定一个变量
- javascript - 是否可以将对象初始化为具有属性的函数?
- java - 将 int 数组转换为方向
- php - 将查询传递给使用第二个数据库的 module_hook
- c++ - mysql_real_connect() 不会使用实际 ip 与远程数据库建立连接
- python - 随机森林误差(样本数量不一致的输入变量)
- lisp - Lisp - “尝试绑定非符号”错误
- javascript - 单击按钮后Javascript取消SetTimeout
- python - 使用 LSTM 网络和 Keras 进行文本分类,准确率为 0.0%