如何在Power BI的Deneb分面柱状图添加上下文本标签?
Power BI Deneb分面柱状图添加文本标签问题
在Power BI中使用Deneb制作分面(小多图)柱状图时,无法为柱状图添加上方或下方的文本标签,现提供当前使用的Vega-Lite代码、数据集,以及效果说明:
- 现有效果:分面柱状图仅显示柱子,无对应数值标签
- 期望效果:每个柱状图的上方或下方显示对应百分比形式的数值标签(正数值在柱子上方,负数值在柱子下方,0值居中)
当前代码
{ "data": {"values": [ {"Region":"A","Month":"1","Difference":"-0.01"}, {"Region":"A","Month":"2","Difference":"0"}, {"Region":"A","Month":"3","Difference":"-0.03"}, {"Region":"A","Month":"4","Difference":"-0.01"}, {"Region":"A","Month":"5","Difference":"-0.01"}, {"Region":"A","Month":"6","Difference":"0.05"}, {"Region":"A","Month":"7","Difference":"-0.05"}, {"Region":"A","Month":"8","Difference":"-0.03"}, {"Region":"A","Month":"9","Difference":"0.03"}, {"Region":"A","Month":"10","Difference":"-0.01"}, {"Region":"A","Month":"11","Difference":"-0.01"}, {"Region":"A","Month":"12","Difference":"0.03"}, {"Region":"B","Month":"1","Difference":"-0.02"}, {"Region":"B","Month":"2","Difference":"-0.02"}, {"Region":"B","Month":"3","Difference":"0.02"}, {"Region":"B","Month":"4","Difference":"0.03"}, {"Region":"B","Month":"5","Difference":"-0.05"}, {"Region":"B","Month":"6","Difference":"-0.02"}, {"Region":"B","Month":"7","Difference":"-0.01"}, {"Region":"B","Month":"8","Difference":"0.03"}, {"Region":"B","Month":"9","Difference":"-0.03"}, {"Region":"B","Month":"10","Difference":"-0.03"}, {"Region":"B","Month":"11","Difference":"0.01"}, {"Region":"B","Month":"12","Difference":"-0.02"}, {"Region":"C","Month":"1","Difference":"-0.05"}, {"Region":"C","Month":"2","Difference":"-0.04"}, {"Region":"C","Month":"3","Difference":"-0.03"}, {"Region":"C","Month":"4","Difference":"0"}, {"Region":"C","Month":"5","Difference":"0"}, {"Region":"C","Month":"6","Difference":"-0.02"}, {"Region":"C","Month":"7","Difference":"-0.05"}, {"Region":"C","Month":"8","Difference":"0.02"}, {"Region":"C","Month":"9","Difference":"0"}, {"Region":"C","Month":"10","Difference":"-0.03"}, {"Region":"C","Month":"11","Difference":"-0.03"}, {"Region":"C","Month":"12","Difference":"0.02"}, {"Region":"D","Month":"1","Difference":"0.05"}, {"Region":"D","Month":"2","Difference":"-0.02"}, {"Region":"D","Month":"3","Difference":"-0.05"}, {"Region":"D","Month":"4","Difference":"-0.05"}, {"Region":"D","Month":"5","Difference":"0"}, {"Region":"D","Month":"6","Difference":"-0.01"}, {"Region":"D","Month":"7","Difference":"0.02"}, {"Region":"D","Month":"8","Difference":"-0.01"}, {"Region":"D","Month":"9","Difference":"0"}, {"Region":"D","Month":"10","Difference":"-0.01"}, {"Region":"D","Month":"11","Difference":"0.01"}, {"Region":"D","Month":"12","Difference":"-0.03"} ]}, "mark": { "type": "bar", "stroke": "black", "opacity": 1, "cornerRadius": 2, "tooltip":true }, "width": 440, "height": 75, "cornerRadius": 2, "encoding": { "facet": { "field": "Region", "type": "ordinal", "title": null, "columns": 2 }, "x": { "field": "Month", "type": "ordinal", "axis": {"labelAngle": 0} }, "y": { "field": "Difference", "type": "quantitative", "axis": { "format": "0%", "formatType": "pbiFormat" } }, "color": { "condition": { "test": "datum['Difference']<0", "value": "#F78272" }, "value": "#F2C80F" }, "text": { "field": "Difference", "type": "quantitative" } } }
解决方案
仅使用bar类型的mark时,text编码不会自动生成文本标签,需要通过**图层(layer)**将柱状图和文本标签分开绘制。修改后的代码如下:
{ "data": {"values": [ {"Region":"A","Month":"1","Difference":"-0.01"}, {"Region":"A","Month":"2","Difference":"0"}, {"Region":"A","Month":"3","Difference":"-0.03"}, {"Region":"A","Month":"4","Difference":"-0.01"}, {"Region":"A","Month":"5","Difference":"-0.01"}, {"Region":"A","Month":"6","Difference":"0.05"}, {"Region":"A","Month":"7","Difference":"-0.05"}, {"Region":"A","Month":"8","Difference":"-0.03"}, {"Region":"A","Month":"9","Difference":"0.03"}, {"Region":"A","Month":"10","Difference":"-0.01"}, {"Region":"A","Month":"11","Difference":"-0.01"}, {"Region":"A","Month":"12","Difference":"0.03"}, {"Region":"B","Month":"1","Difference":"-0.02"}, {"Region":"B","Month":"2","Difference":"-0.02"}, {"Region":"B","Month":"3","Difference":"0.02"}, {"Region":"B","Month":"4","Difference":"0.03"}, {"Region":"B","Month":"5","Difference":"-0.05"}, {"Region":"B","Month":"6","Difference":"-0.02"}, {"Region":"B","Month":"7","Difference":"-0.01"}, {"Region":"B","Month":"8","Difference":"0.03"}, {"Region":"B","Month":"9","Difference":"-0.03"}, {"Region":"B","Month":"10","Difference":"-0.03"}, {"Region":"B","Month":"11","Difference":"0.01"}, {"Region":"B","Month":"12","Difference":"-0.02"}, {"Region":"C","Month":"1","Difference":"-0.05"}, {"Region":"C","Month":"2","Difference":"-0.04"}, {"Region":"C","Month":"3","Difference":"-0.03"}, {"Region":"C","Month":"4","Difference":"0"}, {"Region":"C","Month":"5","Difference":"0"}, {"Region":"C","Month":"6","Difference":"-0.02"}, {"Region":"C","Month":"7","Difference":"-0.05"}, {"Region":"C","Month":"8","Difference":"0.02"}, {"Region":"C","Month":"9","Difference":"0"}, {"Region":"C","Month":"10","Difference":"-0.03"}, {"Region":"C","Month":"11","Difference":"-0.03"}, {"Region":"C","Month":"12","Difference":"0.02"}, {"Region":"D","Month":"1","Difference":"0.05"}, {"Region":"D","Month":"2","Difference":"-0.02"}, {"Region":"D","Month":"3","Difference":"-0.05"}, {"Region":"D","Month":"4","Difference":"-0.05"}, {"Region":"D","Month":"5","Difference":"0"}, {"Region":"D","Month":"6","Difference":"-0.01"}, {"Region":"D","Month":"7","Difference":"0.02"}, {"Region":"D","Month":"8","Difference":"-0.01"}, {"Region":"D","Month":"9","Difference":"0"}, {"Region":"D","Month":"10","Difference":"-0.01"}, {"Region":"D","Month":"11","Difference":"0.01"}, {"Region":"D","Month":"12","Difference":"-0.03"} ]}, "width": 440, "height": 75, "facet": { "field": "Region", "type": "ordinal", "title": null, "columns": 2 }, "encoding": { "x": { "field": "Month", "type": "ordinal", "axis": {"labelAngle": 0} }, "y": { "field": "Difference", "type": "quantitative", "axis": { "format": "0%", "formatType": "pbiFormat" } }, "color": { "condition": { "test": "datum['Difference']<0", "value": "#F78272" }, "value": "#F2C80F" } }, "layer": [ { "mark": { "type": "bar", "stroke": "black", "opacity": 1, "cornerRadius": 2, "tooltip": true } }, { "mark": { "type": "text", "fontSize": 10, "align": "center" }, "encoding": { "text": { "field": "Difference", "type": "quantitative", "format": "0%" }, "y": { "condition": [ {"test": "datum['Difference'] > 0", "value": {"expr": "datum.Difference + 0.01"}}, {"test": "datum['Difference'] < 0", "value": {"expr": "datum.Difference - 0.01"}} ], "value": 0 } } } ] }
修改说明
- 将原有的单mark结构改为
layer图层,分别绘制柱状图和文本标签 - 文本标签使用
text类型的mark,通过condition判断数值正负,调整y轴位置:正数值上移,负数值下移,0值居中 - 文本格式设置为百分比,与y轴保持一致
- 将
facet从encoding中移至顶层,符合Vega-Lite的结构规范
内容的提问来源于stack exchange,提问作者tomecsek
相关产品推荐
相关产品推荐

