hello
you can already have a better fit without the threshold and use it only to truncate the fitted curve (but I agree it's not the same as try to do the fit on the data only above the threshold but that doesn't seem to be an option with gevfit)
load('blockmax.mat')
[blockcdf , blockx ] = ecdf(blockmax); %Get the empirical cumulative distribution function of data
threshold = 0.05;
[p, ci] = gevfit(blockmax(blockmax>0)); %Get GEV fit for all values above 0
gevc = gevcdf(blockx,p(1),p(2),p(3)); %Get the GEV CDF
%These two plots are not comparing apples to apples! The GEV cdf has a
%threshold applied...
plot(blockx,blockcdf); hold on
ind = (blockx>threshold);
plot(blockx(ind),gevc(ind))
plot([threshold threshold],[0 1],'--k')
grid on
ylabel('Cumulative Probability')
xlabel('Value')
set(gca,'XScale','log')
legend('Empirical CDF','GEV Fit','Location','northwest')