如何在Google的sankey排行榜/ D3中指定数字格式

时间:2015-11-30 10:41:16

标签: javascript d3.js google-visualization

我已经成为谷歌sankey排行榜的忠实粉丝,但有一件事困扰着我 - 我无法弄清楚如何进行数字格式化,以便相关单位显示第三个数据表列中的数字。我尝试了几种方法 - 尝试使用格式化程序设置'模式'选项,但是对于我的生活似乎没有任何工作 - 请参阅此JSFiddle示例:http://jsfiddle.net/nickdunbar/t9e3dcy3/1/

sankey: {
    iterations: 64,
    node: {
    pattern: '$### m', nodePadding: 30, interactivity: true, label: { fontName: 'Times-Roman',
                     fontSize: 14,
                     color: '#871b47',
                     bold: false,
                     italic: true } 
    },
    link: {
        pattern: '$###.## bn'
        },

对于其他Google图表类型,数字格式的运行非常顺利,我无法相信某处没有可用的选项。它不在Google文档中。我看过D3的文献,但也没有明显的东西出现。

1 个答案:

答案 0 :(得分:2)

请参阅Customizing tooltip content上的文档,了解实现所需目标的方法。您需要将自定义工具提示的内容指定为数据的另一列:

data.addColumn({type: 'string', role: 'tooltip'});

根据您的模式指定自定义格式化程序

var formatter = new google.visualization.NumberFormat({pattern:'$###.## bn'}); 

然后您可以通过映射输入来附加信息:

data.addRows([
        ['Fred','Ann',107.91], 
        ['Bill','Ann',47.86],
        // more input...
    ].map(function(d) {
        d.push(formatter.format(d[2]);   // the tooltip's formatted content as last column
        return d; 
    }));

使用此映射,您可以应用您要查找的每种数字格式,或者执行更加精美的内容,例如HTML formatting

google.load("visualization", "1.1", {packages:["sankey"]});

google.setOnLoadCallback(drawChart);
   function drawChart() {
    var data = new google.visualization.DataTable();
    var formatter = new google.visualization.NumberFormat({pattern:'$###.## bn'}); 
    data.addColumn('string', 'From');
    data.addColumn('string', 'To');
    data.addColumn('number', 'Revenues');
    data.addColumn({type: 'string', role: 'tooltip'});
    data.addRows([
        ['Fred','Ann',107.91],
		['Bill','Ann',47.86],
		['Carol','Ann',817.9],
		['Jim','Kevin',400],
		['Ann','Kevin',973.67],
		['Sally','Kevin',146.47],
		['Kevin','EVP Sales',1520.14]
        ].map(function(d) {
        	d.push(formatter.formatValue(d[2]));
        	return d; 
    	}));
       

    // Set chart options
    var options = {
      width: 500,
      height: 300,
        formatNumber: '$### bn',
        sankey: {
		iterations: 64,
		node: {
		pattern: '$### bn', nodePadding: 30, interactivity: true, label: { fontName: 'Times-Roman',
                         fontSize: 14,
                         color: '#871b47',
                         bold: false,
                         italic: true }	
		},
		link: {
			//colorMode: 'source',
			pattern: '$### bn'
			},
	allowHtml: 'true',
	tooltip: {isHtml: 'true'}
			}

    };

    // Instantiate and draw our chart, passing in some options.
    var chart = new google.visualization.Sankey(document.getElementById('sankey_multiple'));
    chart.draw(data, options);
   }
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
    
</script>
<body>
    <div id="sankey_multiple" style="width: 900px; height: 300px;"></div>
</body>