I've changed the lines 1519-1542 to
nv.utils.noData = function(chart, container) {
var opt = chart.options(),
margin = opt.margin(),
noData = opt.noData(),
data = (noData == null) ? ["No Data Available."] : [noData],
height = nv.utils.availableHeight(opt.height(), container, margin),
width = nv.utils.availableWidth(opt.width(), container, margin),
x = margin.left + width/2,
y = margin.top + height/2;
//Remove any previously created chart components
container.selectAll('g').remove();
var noDataText = container.selectAll('.nv-noData').data(data);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.style('text-anchor', 'middle');
noDataText
.attr('x', '50%')
.attr('y', '50%')
.text(function(t){ return t; });
In combination with following CSS:
.nvd3.nv-noData {
position: relative;
transform: translate(-50%, -50%) !important;
font-size: 24px;
color: #666;
font-weight: 200;
text-align: center;}
I have currently perfect centered no-data texts for all my charts (bar-charts, pie-charts, multibar, sunburst and area charts)