展示效果如下:
代码如下
function [fig] = ecg_plot(data, varargin)
%可选参数如下:
p = inputParser;
defaultColumn=1;
defaultFs = 1000;
defaultHeight = 2;
defaultGap = 0.4*defaultFs;
defaultColor = [0,0,0.7];
addParameter(p,'Column',defaultColumn);
addParameter(p,'Fs',defaultFs);
addParameter(p,'Height',defaultHeight);
addParameter(p,'Gap',defaultGap);
addParameter(p,'LeadNames',[]);
addParameter(p,'Color',defaultColor);
% addParameter(p,'MinorGridColor',[0.75, 0.75, 0.75]);
% addParameter(p,'GridColor',[0.4,0.4,0.4]);
addParameter(p,'MinorGridColor',[1, 0.7, 0.7]);
addParameter(p,'GridColor',[1,0,0]);
addParameter(p,'LineWidth', 1);
parse(p,varargin{:});
columns = p.Results.Column;
fs = p.Results.Fs;
row_height = p.Results.Height;
gap = p.Results.Gap;
leadnames = p.Results.LeadNames;
%心电格子绘制
% fig = figure('Name','ECG','NumberTitle','off');
% set(fig, 'position', get(0,'ScreenSize'))
hold on
[ch,len] = size(data);
rows = ceil(ch/columns);
% set(gcf,'unit','inches','position',[0,0,((len*columns + columns*gap)), rows*row_height]);
x_min = -gap;
x_max = columns*len + columns*gap;
y_min = row_height/2 - rows*row_height;
y_max = row_height/2;
xticks(x_min-10*fs:0.2*fs:x_max+10*fs)
xticklabels([])
yticks(y_min-10:0.5:y_max+10)
yticklabels([])
ax = gca;
ax.GridLineStyle = '-';
ax.GridColor = p.Results.GridColor;
ax.GridAlpha = 0.25;
ax.XGrid = 'on';
ax.YGrid = 'on';
ax.MinorGridLineStyle = '-';
ax.MinorGridColor = p.Results.MinorGridColor;
ax.MinorGridAlpha = 0.25;
ax.XMinorGrid = 'on';
ax.YMinorGrid = 'on';
ax.XAxis.MinorTickValues = x_min-10*fs:0.04*fs:x_max+10*fs;
ax.XAxis.MinorTickValuesMode="manual";
ax.YAxis.MinorTickValues = y_min-10:0.1:y_max+10;
ax.XAxis.MinorTickValuesMode="manual";
ylim([y_min, y_max])
xlim([x_min, x_max])
%波形绘制
t = (1:len);
for c = 1:columns
for i = 1:rows
t_lead = (c - 1)*rows + i;
y_offset = -row_height*ceil(mod((i - 1),rows));
x_offset = 0;
if c > 1
x_offset = len*(c - 1) + gap*c;
% plot([x_offset-gap/2, x_offset-gap/2], [y_offset, y_offset + 1],'Color', p.Results.Color, 'LineWidth',p.Results.LineWidth)
else
% plot((-gap:1/fs:-gap/2),square(2*pi*2/gap*((-gap:1/fs:-gap/2)-gap*5/8))/2+ 0.5 + y_offset,'Color', p.Results.Color, 'LineWidth',p.Results.LineWidth)
end
if false == isempty(leadnames)
text(x_offset-0.2*fs, y_offset, leadnames(t_lead),'FontSize', 12)
end
plot(t + x_offset, data(t_lead,:) + y_offset, 'Color', p.Results.Color, 'LineWidth',p.Results.LineWidth)
end
end
end