Here’s a little idiom for when you’re using one key for the value of a stacked bar chart but want to map a different ValueProvider onto your tooltip (or label).
//Tooltip Config - gets (f) value but if null, just return the int SeriesToolTipConfig<DataPoint> config = new SeriesToolTipConfig<DataPoint>(); config.setLabelProvider(new SeriesLabelProvider<DataPoint>() { @Override public String getLabel(DataPoint item, ValueProvider<? super DataPoint, ? extends Number> valueProvider) { String vindex = valueProvider.getPath(); String findex = vindex.replace(ChartModel.CELL_VALUE, ChartModel.CELL_FORMATTED_VALUE); MapLabelProvider labelProvider = new MapLabelProvider(findex); String tooltip = labelProvider.getValue(item); return tooltip == null || tooltip.equals(_chartConstants.emptyLabel()) ? String.valueOf(valueProvider.getValue(item).intValue()) : tooltip; } }); series.setToolTipConfig(config);
By default, Sencha GXT charts only passes in the valueProvider and the data item used to render the stacked bar chart. So what if you want to provider a different value for the tooltip or label? How do you add text? Since be follow the google datatables JSON format, we use a key of “v” in a cell array to represent the numeric value used to generate the chart. We use a key “f” in the same cell array to represent the tooltip.
Here’s what our JSON looks like and here’s the resultant store (After the adapter transforms the data).
{ "offset": 0, "totalCount": 1, "items": [ { "title": "Registration Summary", "data": { "cols": [ { "id": "Stacked bar one", "label": "Hamburgers", "type": "number" }, { "id": "Stacked bar two", "label": "Fries", "type": "number" } ], "rows": [ { "l": "McDonalds", "c": [ { "v": "5", "f": "5 hamburgers sold!" }, { "v": "2", "f": "2 fries sold" } ] }, { "l": "Burger King", "c": [ { "v": "0", "f": "0 hamburgers sold :(" }, { "v": "3", "f": "3 fries sold" } ] } ... /* More omitted */ ] } } ] }
And here’s the resultant store:
[ { v1=2, label0=Hamburgers, v0=5, label1=Fries, id1=Stacked bar two, type1=number, id0=Stacked bar one, type0=number, f1=2 fries sold, l=McDonalds, f0=5 hamburgers sold! }, { v1=3, label0=Hamburgers, v0=0, label1=Fries, id1=Stacked bar two, type1=number, id0=Stacked bar one, type0=number, f1=3 fries sold, l=9650SIP, f0=0 hamburgers sold 😦 } ... /* more omitted */ ]
As you can see, we use v0 – vN to as values to render per bar in our chart, where each of v0 – vN corresponds to 1 stack within the bar. Here’s the resulting tooltip:
