It does not throw any errors, it just does not do what you want it to do.
Try this instead:
xlabelname = {'Number of Samples','${D_{i}}$'};
That worked when I ran it.
The sprintf call is not necessary here, however if you want to use it:
xlabelname = sprintf('Number of Samples\n${D_{i}}$' );
produces the same result (note the added ‘\n’ newline character).