ECG-Kit 1.0
(5,489 bytes)
%% (Internal) Plot the area under the ROC curve
%
% plot_auc( areas, pvalues, strTitle, strLegend, bPrint, fig_hdl)
%
%
% Arguments:
%
% + areas: string to parse
%
% + pvalues: string to parse
%
% + strTitle: string to parse
%
% + strLegend: string to parse
%
% + bPrint: string to parse
%
% + fig_hdl: string to parse
%
% Example:
%
%
% See also ECGwrapper
%
% Author: Mariano Llamedo Soria (llamedom at {electron.frba.utn.edu.ar; unizar.es}
% Version: 0.1 beta
% Birthdate : 30/7/2014
% Last update: 30/7/2014
% Copyright 2008-2015
%
function plot_auc( areas, pvalues, strTitle, strLegend, bPrint, fig_hdl)
if( nargin < 4 )
strLegend = [];
end
if( nargin < 3 )
strTitle = [];
end
if( nargin < 5 || isempty(bPrint) )
bPrint = false;
end
if( size(areas,1) ~= 3 )
error('areas should have lower CI - mean Area - upper CI in the rows')
end
if( nargin < 6 || isempty(fig_hdl) )
fig_hdl = figure();
else
fig_hdl = figure(fig_hdl);
% clf(fig_hdl);
end
areas2plot = size(areas,2);
Xvalues = [ ];
Yvalues = [ ];
significance_levels = [0.05 0.01 0.001];
significance_levels_str = {'0.05' '0.01' '0.001'};
box_dist = 1;
box_width = box_dist* 2/3;
box_loc = 1:box_dist:box_dist*areas2plot;
box_height_k = 0.75;
colors = my_colormap(areas2plot);
areas_min = min(min(areas));
areas_max = max(max(areas));
areas_range = areas_max - areas_min;
if(bPrint)
strFontName = 'LMRoman12';
FontSizeTitle = 22;
FontSizeLabel = 20;
FontSizeTick = 18;
else
strFontName = 'Helvetica';
FontSizeTitle = 12;
FontSizeLabel = 12;
FontSizeTick = 10;
end
axes_hdl = gca();
% cla(axes_hdl);
xlim([0 (box_dist*areas2plot)+box_dist])
% ylim([areas_min - 0.1*areas_range areas_max + 0.2*areas_range ])
hold on
for ii = 1:areas2plot
box_height = box_height_k * (areas(3,ii) - areas(1,ii));
this_colour = colors( 1+rem(ii-1, size(colors,1)),:);
plot( box_loc(ii) + [-box_width/4 box_width/4], [areas(3,ii) areas(3,ii)], 'Color', this_colour, 'LineWidth', 2 );
plot( box_loc(ii) + [-box_width/4 box_width/4], [areas(1,ii) areas(1,ii)], 'Color', this_colour, 'LineWidth', 2 )
plot( [box_loc(ii) box_loc(ii)], [areas(3,ii) areas(1,ii)], 'Color', this_colour, 'LineWidth', 2 )
fill( box_loc(ii) + [-box_width/2 -box_width/2 box_width/2 box_width/2], areas(2,ii) + [ -box_height/2 box_height/2 box_height/2 -box_height/2], this_colour, 'EdgeColor', this_colour );
text( box_loc(ii), areas(2,ii), num2str(areas(2,ii), '%3.2f'), 'HorizontalAlignment', 'center', 'FontName', strFontName, 'FontSize', FontSizeTick, 'Color', (1-this_colour));
end
for ii = 1:(areas2plot-1)
for jj = ii+1:areas2plot
if( pvalues(ii,jj) < 0.05 )
y_loc = max(areas(3,ii), areas(3,jj)) + (0.05*areas_range);
if( bPrint )
plot( [box_loc(ii) box_loc(ii) box_loc(jj) box_loc(jj)], y_loc + (0.02*areas_range) * [0 1 1 0], 'LineWidth', 1 , 'Color', [0 0 0] );
else
plot( [box_loc(ii) box_loc(ii) box_loc(jj) box_loc(jj)], y_loc + (0.02*areas_range) * [0 1 1 0], 'LineWidth', 2 , 'Color', [0 0 0] );
end
end
end
% overprint the p-value
for jj = ii+1:areas2plot
aux_idx = find(pvalues(ii,jj) < significance_levels, 1, 'last');
if( ~isempty(aux_idx) )
y_loc = max(areas(3,ii), areas(3,jj)) + (0.05*areas_range);
if( bPrint )
aux_hdl = text( box_loc(ii)+(box_loc(jj) - box_loc(ii))/2, y_loc + (0.07*areas_range), [ 'p < ' significance_levels_str{aux_idx} ], 'HorizontalAlignment', 'center', 'FontName', strFontName, 'FontSize', FontSizeTick, 'Visible', 'off');
aux_extent = get(aux_hdl, 'Extent');
delete(aux_hdl)
aux_extent(1) = aux_extent(1) + 0.1*aux_extent(3);
aux_extent(3) = 0.8*aux_extent(3);
aux_extent(2) = aux_extent(2) + 0.25*aux_extent(4);
aux_extent(4) = 0.7*aux_extent(4);
fill( aux_extent(1)+ [ 0 0 aux_extent(3) aux_extent(3) ], aux_extent(2)+ [ 0 aux_extent(4) aux_extent(4) 0 ], [1 1 1], 'EdgeColor', [1 1 1] );
text( box_loc(ii)+(box_loc(jj) - box_loc(ii))/2, y_loc + (0.07*areas_range), [ 'p < ' significance_levels_str{aux_idx} ], 'HorizontalAlignment', 'center', 'FontName', strFontName, 'FontSize', FontSizeTick);
else
text( box_loc(ii)+(box_loc(jj) - box_loc(ii))/2, y_loc + (0.07*areas_range), [ 'p < ' significance_levels_str{aux_idx} ], 'HorizontalAlignment', 'center', 'FontName', strFontName, 'FontSize', FontSizeTick, 'BackgroundColor', [1 1 1]);
end
end
end
end
hold off
set(axes_hdl, 'Box', 'off' );
set(axes_hdl, 'Xtick', box_loc );
set(axes_hdl, 'XtickLabel', strLegend );
rotateticklabel(axes_hdl, 20);
set(axes_hdl, 'Ytick', linspace(areas_min, areas_max, 5) );
set(axes_hdl, 'YtickLabel', num2str(colvec(linspace(areas_min, areas_max, 5)), '%3.2f') );
set(axes_hdl, 'FontName', strFontName );
set(axes_hdl, 'FontSize', FontSizeTick );
title(strTitle, 'FontName', strFontName, 'FontSize', FontSizeTitle)
ylabel('AUC', 'FontName', strFontName, 'FontSize', FontSizeLabel)