Reputation: 41
I'm using ApexCharts in my Java application to create bar charts. I'm facing an issue where the data labels are not visible when the bars are too small to accommodate them. I want to ensure that the data labels are always visible, either inside the bar or above the bar if the bar is too small.
Here's a simplified version of my code generating the bar chart using the ApexCharts Java wrapper:
ApexCharts chart = new ApexCharts();
Chart chartConfig = ChartBuilder.get()
.withType(com.github.appreciated.apexcharts.config.chart.Type.BAR)
.withHeight("350")
.withStacked(true)
.withToolbar(ToolbarBuilder.get().withShow(false).build())
.withBackground("#233348")
.build();
chart.setChart(chartConfig);
PlotOptions plotOptions = PlotOptionsBuilder.get()
.withBar(BarBuilder.get()
.withHorizontal(false)
.build())
.build();
chart.setPlotOptions(plotOptions);
chart.setDataLabels(DataLabelsBuilder.get()
.withEnabled(true)
.withFormatter(
"function(val) { if (val >= 1000000) { return (val / 1000000).toFixed(1) + 'M'; } else { return val / 1000 + 'K'; } }")
.withStyle(StyleBuilder.get().withFontSize("12px").build())
.build());
// Setting x-axis categories
XAxis xAxis = XAxisBuilder.get()
.withCategories(continuous.size() > oneTime.size() ? continuousKeys : oneTimeKeys)
.withTooltip(TooltipBuilder.get().withEnabled(false).build())
.build();
chart.setXaxis(xAxis);
// Setting y-axis labels
YAxis yAxis = YAxisBuilder.get()
.withLabels(LabelsBuilder.get()
.withFormatter(
"function(val) { if (val >= 1000000) { return (val / 1000000).toFixed(1) + 'M'; } else { return val / 1000 + 'K'; } }")
.build())
.withTooltip(TooltipBuilder.get().withEnabled(false).build())
.build();
chart.setYaxis(new YAxis[] { yAxis });
// Setting legend position
chart.setLegend(LegendBuilder.get()
.withPosition(com.github.appreciated.apexcharts.config.legend.Position.TOP)
.withHorizontalAlign(com.github.appreciated.apexcharts.config.legend.HorizontalAlign.LEFT)
.build());
In this code, I've set up the chart to display data labels using the DataLabelsBuilder, but when the bar is too small, the data label is hidden, which is not ideal for my application.
I've tried adjusting the formatter function in the DataLabelsBuilder to display the label above the bar when it's too small, but I'm not sure how to achieve this effectively.
Could someone provide guidance on how to ensure that data labels are always visible, either inside the bar or above the bar when the bar is too small? Any help or suggestions would be greatly appreciated.
Thanks in advance!
Upvotes: 0
Views: 205