我正在尝试制作一个动画,其中几个数据集在一个histogram
图中循环,并且数据提示跟随每一帧中的最高条,如下所示:
这是使用条形图实现所需结果的代码:
%% // Initialization
close all force; clear variables; clc;
%% // Generate some data:
indMax = 20; data = randi(indMax,[5,45]);
%% // Generate the 1st values to plot:
edges = 0.5:1:indMax+0.5;
counts = histcounts(data(1,:),edges);
[~,maxInd] = max(counts);
%% // Create the plot and the datatip:
figure(100); hBar = bar(1:indMax,counts);
hDT = makedatatip(hBar,maxInd); hDT = handle(hDT);
grid on; hold on; grid minor; xlim([0,indMax+1]); ylim([0,10]);
%% // Update the figure and the datatip:
for indFrame = 2:size(data,1)
counts = histcounts(data(indFrame,:),edges);
[~,maxInd] = max(counts);
hBar.YData = counts; %// Update bar heights
hDT.Cursor.DataIndex = maxInd; %// Update datatip location
%// Alternatively to the above line: hDT.Position = [newX newY newZ];
java.lang.Thread.sleep(1000);
drawnow;
end
请注意,数据提示是使用makedatatip
来自 FEX 的提交的修改版本创建的,根据提交页面上的评论(对于 27/06/2012 版本是这样makedatatip
):
需要对代码进行一些更改:
***********CHANGE 1**********
第 122 行需要: pos = [X(index(n)) Y(索引(n)) 0];
***********更改 2**********
第 135-141 行应注释掉
并且还将更改 3: 第 84 行更改为Z = [];
由于makedatatip
尝试访问绘图中不存在的输入句柄的'XData'
和属性,因此它拒绝工作。所以我的问题是:'YData'
histogram
如何在histogram
绘图中以编程方式创建和更新数据提示(使用matlab-hg2)以及直方图本身?