JFreeChart| 图解JFreeChart中的柱状图(BarChart)

前言

条形图样式展示,其他基于CategoryPlot类型的LineChart等等于该设置类似.
这里写图片描述


数据集

本文所使用的数据集.

    private static CategoryDataset createDataset() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(1.0, "Row 1", "Column 1");
        dataset.addValue(5.0, "Row 1", "Column 2");
        dataset.addValue(3.0, "Row 1", "Column 3");
        dataset.addValue(2.0, "Row 2", "Column 1");
        dataset.addValue(3.0, "Row 2", "Column 2");
        dataset.addValue(2.0, "Row 2", "Column 3");
        return dataset;
    }

常见功能设置


标题设置

TextTitle title = new TextTitle("BarChartDemo -Yves", JFreeChart.DEFAULT_TITLE_FONT); // 还可以设置颜色,位置等...
chart.setTitle(title);

图例设置

chart.removeLegend();// 图例是默认显示的,使用该方法不显示图例

LegendTitle legend = chart.getLegend();
if (legend != null) {
    legend.setFrame(new BlockBorder(Color.RED));// 通过Color.WHITE隐藏
    legend.setItemPaint(Color.RED);// 设置图例画笔颜色(也就是文字颜色)
    legend.setBackgroundPaint(Color.DARK_GRAY);// 设置图例背景色
}

图表背景

// 图表整个背景颜色设置
chart.setBackgroundPaint(Color.PINK);

图表绘制背景设置

注意图表绘制区域是只图表展示区域,而不是整个面板区域,这里就是条形图BarChart展示的区域.

Plot plot = chart.getPlot();

// 图表绘制线条的透明度
plot.setForegroundAlpha(1f);// 1为不透明

// 图表绘制背景透明度
plot.setBackgroundAlpha(0.5F);

// 图表绘制背景颜色
plot.setBackgroundPaint(Color.BLUE);// 比如画图区域的背景颜色,要与报表的整个背景颜色区分开来

// 图表绘制背景边框线设置
plot.setOutlinePaint(Color.YELLOW);// 颜色
plot.setOutlineStroke(new BasicStroke(2.f));// 大小
plot.setOutlineVisible(true);// 是否显示

图表绘制中网格线设置

 // 设置背景中的网格线颜色,和是否显示
 cPlot.setDomainGridlinePaint(Color.white);
 cPlot.setDomainGridlinesVisible(true);// 竖线
 cPlot.setRangeGridlinePaint(Color.white);
 cPlot.setRangeGridlinesVisible(true);// 横线

X轴设置

CategoryAxis domainAxis = cPlot.getDomainAxis();

// X轴标签位置设置
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);//设置种类标签旋转为90度

// X轴的标签设置
domainAxis.setLabel(null);//通过实例化Chart的时候设置,实例化后可以通过该方法设置,null为不显示

Y轴设置

NumberAxis numberaxis = (NumberAxis) cPlot.getRangeAxis();

//Y轴增长单元设置
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
numberaxis.setAutoRangeIncludesZero(true);// 起始坐标是否包括0

// Y轴的标签设置
numberaxis.setLabel(null);//通过实例化Chart的时候设置,实例化后可以通过该方法设置,null为不显示

// Y轴显示格式定制  (定制成显示百分比)
NumberAxis newNumberaxis = new NumberAxis("Percentage");//构造参数为Y轴显示的label
newNumberaxis.setNumberFormatOverride(new DecimalFormat("0.00%"));
cPlot.setRangeAxis(newNumberaxis);

标记范围值设置

CategoryPlot cPlot = chart.getCategoryPlot();

// 标记范围值设置
ValueMarker localValueMarker = new ValueMarker(3.0D, new Color(200, 200, 255), new BasicStroke(1.0F), Color.BLACK, new BasicStroke(1.0F), 1.0F);
cPlot.addRangeMarker(localValueMarker, Layer.BACKGROUND);

柱状图相关设置


柱状图外廓线设置

注意: 基础的外廓线设置,如果只需要对指定的Series设定则使用setSeriesOutlinePaint方法

renderer.setDrawBarOutline(true);// 是否可见
renderer.setBaseOutlineStroke(new BasicStroke(2.0f), true);// 外廓线粗细
renderer.setBaseOutlinePaint(Color.BLUE); // 颜色设置

设置柱状图渲染器

renderer.setBarPainter(new StandardBarPainter());// 标准的渲染器(支持颜色渐变)
renderer.setBarPainter(new GradientBarPainter()); //梯度条形图渲染器(不支持颜色渐变)

柱状图颜色渐变设置

注意需要渲染器为StandardBarPainter.

renderer.setBarPainter(new StandardBarPainter());

GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.red, 0.0F, 0.0F, new Color(64, 0, 0));
GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F, new Color(0, 64, 0));
GradientPaint gradientpaint3 = new GradientPaint(0.0F, 0.0F, Color.BLUE, 0.0F, 0.0F, new Color(64, 0, 0));
renderer.setSeriesPaint(0, gradientpaint);
renderer.setSeriesPaint(1, gradientpaint2);//设置系列1为颜色渐变绿色
renderer.setSeriesPaint(2, gradientpaint3);

柱状图标签Label设置

renderer.setBaseItemLabelGenerator(new LabelGenerator());// 标签生成器,一定要设置
renderer.setBaseItemLabelsVisible(true);// 是否显示标签,如果需要显示,则需要设置标签生成器
ItemLabelPosition position1 = new ItemLabelPosition(ItemLabelAnchor.INSIDE12, TextAnchor.CENTER_RIGHT, TextAnchor.CENTER_RIGHT, -1.570796326794897D);
renderer.setBasePositiveItemLabelPosition(position1);// 设置基础标签位置
ItemLabelPosition position2 = new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.CENTER_LEFT, TextAnchor.CENTER_LEFT, -1.570796326794897D);
renderer.setPositiveItemLabelPositionFallback(position2);

自定义标签生成器
生成ItemLabel: 如果不需要显示Label,返回null值既可, 在StandardCategoryItemLabelGenerator中提供简单API对指定Series的label进行显示或隐藏设置,但是如果是使用的自定义CategoryItemLabelGenerator则不会生效.

 static class LabelGenerator extends StandardCategoryItemLabelGenerator {
     StandardCategoryItemLabelGenerator
     renderer.setSeriesItemLabelsVisible(0, Boolean.TRUE);

     @Override
     public String generateLabel(CategoryDataset paramCategoryDataset, int rowKey, int columnKey) {
         Number value = paramCategoryDataset.getValue(rowKey, columnKey);
         return value.toString();
     }
 }

柱状图各个Serie柱子之间间隙设置

renderer.setItemMargin(0.2f);// 0为取消两个Series之前的间隙

猜你喜欢

转载自blog.csdn.net/u011479200/article/details/81480875