如何在条形图中显示每个条形的条形值?

发布于 2024-10-19 10:05:41 字数 71 浏览 3 评论 0原文

需要查看条形图中的条代表的精确值,而不是 Y 轴上的近似值。

这怎么可能做到呢?

感谢您的阅读!

There is a need to see the exact value that a bar in a bar graph represents, as opposed to the approximate value in the Y axis.

How can that be possibly done?

Thanks for reading!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-10-26 10:05:41

在 iReport 3.7.6 中,您只需选中 BarPlot 属性下的“显示标签”框即可。

在之前的版本(3.1.4)中,我必须创建一个 ChartCustomizer 类。

如果您需要格式化标签中的数字(例如百分比、添加千位分隔符等),那么您肯定需要一个 ChartCustomizer,即使在新版本中也是如此。

一个简单的例子:

import java.text.NumberFormat;

import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartCustomizer;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.AbstractCategoryItemLabelGenerator;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;


public class SimpleBarChartCustomizer implements JRChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {
        CategoryPlot plot = chart.getCategoryPlot();
        BarRenderer renderer = (BarRenderer) plot.getRenderer();

        CategoryItemRenderer catRenderer = ((CategoryItemRenderer)renderer);
        catRenderer.setBaseItemLabelGenerator(new NumberLabelGenerator("", NumberFormat.getInstance()));

    }

    static class NumberLabelGenerator extends AbstractCategoryItemLabelGenerator implements CategoryItemLabelGenerator {
        public NumberLabelGenerator(String labelFormat,
                NumberFormat formatter, NumberFormat percentFormatter) {
            super(labelFormat, formatter, percentFormatter);
        }

        protected NumberLabelGenerator(String labelFormat,  NumberFormat formatter) {
            super(labelFormat, formatter);
        }

        private NumberFormat formatter = NumberFormat.getInstance();

        public String generateLabel(CategoryDataset dataset, int series, int category) {
            Number b = dataset.getValue(series, category);
            formatter.setMaximumFractionDigits(2);
            return formatter.format(b);
        }

    }
}

In iReport 3.7.6 you can just check "Show Labels" box under BarPlot properties.

In a prior version (3.1.4), I had to create a ChartCustomizer class.

If you need to format the number in the label (e.g. to Percentage, add thousands separator, etc), then you definitely need a ChartCustomizer, even in the new version.

A simple example:

import java.text.NumberFormat;

import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartCustomizer;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.AbstractCategoryItemLabelGenerator;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;


public class SimpleBarChartCustomizer implements JRChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {
        CategoryPlot plot = chart.getCategoryPlot();
        BarRenderer renderer = (BarRenderer) plot.getRenderer();

        CategoryItemRenderer catRenderer = ((CategoryItemRenderer)renderer);
        catRenderer.setBaseItemLabelGenerator(new NumberLabelGenerator("", NumberFormat.getInstance()));

    }

    static class NumberLabelGenerator extends AbstractCategoryItemLabelGenerator implements CategoryItemLabelGenerator {
        public NumberLabelGenerator(String labelFormat,
                NumberFormat formatter, NumberFormat percentFormatter) {
            super(labelFormat, formatter, percentFormatter);
        }

        protected NumberLabelGenerator(String labelFormat,  NumberFormat formatter) {
            super(labelFormat, formatter);
        }

        private NumberFormat formatter = NumberFormat.getInstance();

        public String generateLabel(CategoryDataset dataset, int series, int category) {
            Number b = dataset.getValue(series, category);
            formatter.setMaximumFractionDigits(2);
            return formatter.format(b);
        }

    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文