Vega堆叠柱状图如何在柱顶添加总计标签?
要实现堆叠柱顶的总计标签,你只需在原有代码基础上新增2部分配置:聚合每个班次总工件数的数据集、用于显示总计值的文本标记,具体修改如下:
1. 新增总计聚合数据集
在data数组中追加以下配置,用于统计每个班次(smena)的总工件数:
{ "name": "total", "source": "table", "transform": [ { "type": "aggregate", "groupby": ["smena"], "fields": ["rozdilKusu"], "ops": ["sum"], "as": ["totalKusu"] } ] }
2. 新增柱顶文本标记
在marks数组中追加以下配置,将总数值渲染到对应柱子的顶部:
{ "type": "text", "from": {"data": "total"}, "encode": { "enter": { "x": {"scale": "xscale", "field": "smena", "band": 0.5}, "y": {"scale": "y", "field": "totalKusu", "offset": -5}, "text": {"field": "totalKusu"}, "align": {"value": "center"}, "fill": {"value": "#000"}, "fontSize": {"value": 12} } } }
可选优化
如果总计标签被画布顶部截断,可以在y轴的scale配置中添加"padding": 15,给y轴顶部预留更多空间:
{ "name": "y", "type": "linear", "range": "height", "nice": true, "zero": true, "padding": 15, "domain": {"data": "table", "field": "y1"} }
完整修改后代码
{ "$schema": "https://vega.github.io/schema/vega/v5.json", "description": "A basic stacked bar chart example.", "width": 500, "height": 200, "padding": 5, "data": [ { "name": "table", "values": [ {"smena": 0, "rozdilKusu": 28, "pocitadlo": 0}, {"smena": 0, "rozdilKusu": 55, "pocitadlo": 1}, {"smena": 1, "rozdilKusu": 43, "pocitadlo": 0}, {"smena": 1, "rozdilKusu": 91, "pocitadlo": 1}, {"smena": 2, "rozdilKusu": 25, "pocitadlo": 0}, {"smena": 2, "rozdilKusu": 53, "pocitadlo": 1}, {"smena": 3, "rozdilKusu": 19, "pocitadlo": 0}, {"smena": 3, "rozdilKusu": 87, "pocitadlo": 1}, {"smena": 4, "rozdilKusu": 52, "pocitadlo": 0}, {"smena": 4, "rozdilKusu": 48, "pocitadlo": 1}, {"smena": 5, "rozdilKusu": 24, "pocitadlo": 0}, {"smena": 5, "rozdilKusu": 49, "pocitadlo": 1}, {"smena": 6, "rozdilKusu": 87, "pocitadlo": 0}, {"smena": 6, "rozdilKusu": 66, "pocitadlo": 1}, {"smena": 7, "rozdilKusu": 17, "pocitadlo": 0}, {"smena": 7, "rozdilKusu": 27, "pocitadlo": 1}, {"smena": 8, "rozdilKusu": 68, "pocitadlo": 0}, {"smena": 8, "rozdilKusu": 16, "pocitadlo": 1}, {"smena": 9, "rozdilKusu": 49, "pocitadlo": 0}, {"smena": 9, "rozdilKusu": 15, "pocitadlo": 1} ], "transform": [ { "type": "stack", "groupby": ["smena"], "sort": {"field": "pocitadlo"}, "field": "rozdilKusu" } ] }, { "name": "total", "source": "table", "transform": [ { "type": "aggregate", "groupby": ["smena"], "fields": ["rozdilKusu"], "ops": ["sum"], "as": ["totalKusu"] } ] } ], "scales": [ { "name": "xscale", "type": "band", "range": "width", "domain": {"data": "table", "field": "smena"} }, { "name": "y", "type": "linear", "range": "height", "nice": true, "zero": true, "padding": 15, "domain": {"data": "table", "field": "y1"} }, { "name": "color", "type": "ordinal", "range": "category", "domain": {"data": "table", "field": "pocitadlo"} } ], "axes": [ {"orient": "bottom", "scale": "xscale", "zindex": 1}, {"orient": "left", "scale": "y", "zindex": 1} ], "marks": [ { "type": "rect", "from": {"data": "table"}, "encode": { "enter": { "x": {"scale": "xscale", "field": "smena"}, "width": {"scale": "xscale", "band": 1, "offset": -1}, "y": {"scale": "y", "field": "y0"}, "y2": {"scale": "y", "field": "y1"}, "fill": {"scale": "color", "field": "pocitadlo"}, "tooltip": [{"field": "rozdilKusu", "type": "ordinal"}] }, "update": { "fillOpacity": {"value": 1} }, "hover": { "fillOpacity": {"value": 0.5} } } }, { "type": "text", "from": {"data": "total"}, "encode": { "enter": { "x": {"scale": "xscale", "field": "smena", "band": 0.5}, "y": {"scale": "y", "field": "totalKusu", "offset": -5}, "text": {"field": "totalKusu"}, "align": {"value": "center"}, "fill": {"value": "#000"}, "fontSize": {"value": 12} } } } ] }
内容的提问来源于stack exchange,提问作者Mirek Havelka
相关产品推荐
相关产品推荐

