(4)Jfreechart之IntervalBarChart(显示差值的图表)

IntervalBarChart 是柱状图的一种形式,是显示数据的最高值和最低值以及差值的图表,如下图
这里写图片描述
具体实现:

import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;

import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.IntervalBarRenderer;
import org.jfree.data.category.DefaultIntervalCategoryDataset;
import org.jfree.ui.TextAnchor;

/**
* An interval bar chart.
*
* @author Jeremy Bowman
*/
public class IntervalBarChartDemo2 {

/** The categories. */
private static final String[] CATEGORIES = {"1", "3", "5", "10", "20"};

/** The label font. */
private static Font labelFont = null;

/** The title font. */
private static Font titleFont = null;

/** The chart. */
private JFreeChart chart = null;

static {
    labelFont = new Font("Helvetica", Font.PLAIN, 10);
    titleFont = new Font("Helvetica", Font.BOLD, 14);
}

/**
 * Creates a new demo.
 */
public IntervalBarChartDemo2() {

    DefaultIntervalCategoryDataset data = null;
    final double[][] lows = {{-.0315, .0159, .0306, .0453, .0557}};
    final double[][] highs = {{.1931, .1457, .1310, .1163, .1059}};
    data = new DefaultIntervalCategoryDataset(lows, highs);
    data.setCategoryKeys(CATEGORIES);

    final String title = "Strategie Sicherheit";
    final String xTitle = "Zeitraum (in Jahren)";
    final String yTitle = "Performance";
    final CategoryAxis xAxis = new CategoryAxis(xTitle);
    xAxis.setLabelFont(titleFont);
    xAxis.setTickLabelFont(labelFont);
    xAxis.setTickMarksVisible(false);
    final NumberAxis yAxis = new NumberAxis(yTitle);
    yAxis.setLabelFont(titleFont);
    yAxis.setTickLabelFont(labelFont);
    yAxis.setRange(-0.2, 0.40);
    final DecimalFormat formatter = new DecimalFormat("0.##%");
    yAxis.setTickUnit(new NumberTickUnit(0.05, formatter));

    final IntervalBarRenderer renderer = new IntervalBarRenderer();
    renderer.setSeriesPaint(0, new Color(51, 102, 153));

// renderer.setLabelGenerator(new IntervalCategoryLabelGenerator());
renderer.setItemLabelsVisible(true);
renderer.setItemLabelPaint(Color.white);
final ItemLabelPosition p = new ItemLabelPosition(
ItemLabelAnchor.CENTER, TextAnchor.CENTER
);
renderer.setPositiveItemLabelPosition(p);

    final CategoryPlot plot = new CategoryPlot(data, xAxis, yAxis, renderer);
    plot.setBackgroundPaint(Color.lightGray);
    plot.setOutlinePaint(Color.white);
    plot.setOrientation(PlotOrientation.VERTICAL);

    this.chart = new JFreeChart(title, titleFont, plot, false);
    this.chart.setBackgroundPaint(Color.white);
}


/**
 * Returns the chart.
 *
 * @return the chart.
 */
public JFreeChart getChart() {
    return this.chart;
}

/**
 * Starting point for the demo.
 *
 * @param args  ignored.
 */
public static void main(final String[] args) {
    final IntervalBarChartDemo2 sample = new IntervalBarChartDemo2();
    final JFreeChart chart = sample.getChart();
    final ChartFrame frame = new ChartFrame("Interval Bar Chart Demo", chart);
    frame.pack();
    frame.setVisible(true);
}

}

注意事项:
数据集合:DefaultIntervalCategoryDataset为默认数据类型,是通过两个二维数组组合的
设置x轴下的提示:通过
defaultintervalcategorydataset.setCategoryKeys(CATEGORIES);//设置x轴的提示,图上的上级下级
defaultintervalcategorydataset.setSeriesKeys(seriesKeys);//设置图例,如图上的均分
设置提示和图例

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值