java jfreechart 折线图_java – 每个点都有文本的JFreeChart折线图

StandardXYItemLabelGenerator应该可以工作;有一个例子

here.

附录:您可以在图片中看到的标签位于单独的字符串数组中.

这些标记可以包含在XYDataset中,如下面的LabeledXYDataset所示.由于没有使用StandardXYItemLabelGenerator的任何功能,因此XYItemLabelGenerator的自定义实现就足够了. XYItemRenderer控制标签的颜色,大小和相对位置.

附录:如何添加工具提示?

在ChartFactory.createXYLineChart()的引导下,只需为渲染器指定XYToolTipGenerator即可.默认格式(见here)是Series:(x,y).

renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());

import java.awt.Color;

import java.awt.Dimension;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JFrame;

import org.jfree.chart.*;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.labels.ItemLabelAnchor;

import org.jfree.chart.labels.ItemLabelPosition;

import org.jfree.chart.labels.XYItemLabelGenerator;

import org.jfree.chart.labels.StandardXYToolTipGenerator;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYItemRenderer;

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

import org.jfree.data.xy.AbstractXYDataset;

import org.jfree.data.xy.XYDataset;

import org.jfree.ui.TextAnchor;

/** @see https://stackoverflow.com/a/14459322/230513 */

public class UnitPrice {

private static XYDataset createDataset() {

LabeledXYDataset ds = new LabeledXYDataset();

ds.add(11, 0, "");

ds.add(12, 68, "A");

ds.add(13, 65, "B");

ds.add(14, 67, "C");

ds.add(15, 69, "D");

ds.add(16, 60, "F");

ds.add(17, 83, "G");

ds.add(18, 86, "H");

ds.add(19, 70, "I");

ds.add(20, 60, "J");

ds.add(21, 55, "K");

ds.add(22, 54, "L");

ds.add(23, 50, "M");

return ds;

}

private static class LabeledXYDataset extends AbstractXYDataset {

private static final int N = 26;

private List x = new ArrayList(N);

private List y = new ArrayList(N);

private List label = new ArrayList(N);

public void add(double x, double y, String label){

this.x.add(x);

this.y.add(y);

this.label.add(label);

}

public String getLabel(int series, int item) {

return label.get(item);

}

@Override

public int getSeriesCount() {

return 1;

}

@Override

public Comparable getSeriesKey(int series) {

return "Unit";

}

@Override

public int getItemCount(int series) {

return label.size();

}

@Override

public Number getX(int series, int item) {

return x.get(item);

}

@Override

public Number getY(int series, int item) {

return y.get(item);

}

}

private static class LabelGenerator implements XYItemLabelGenerator {

@Override

public String generateLabel(XYDataset dataset, int series, int item) {

LabeledXYDataset labelSource = (LabeledXYDataset) dataset;

return labelSource.getLabel(series, item);

}

}

private static JFreeChart createChart(final XYDataset dataset) {

NumberAxis domain = new NumberAxis("Unit");

NumberAxis range = new NumberAxis("Price");

domain.setAutoRangeIncludesZero(false);

XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);

renderer.setBaseItemLabelGenerator(new LabelGenerator());

renderer.setBaseItemLabelPaint(Color.green.darker());

renderer.setBasePositiveItemLabelPosition(

new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER));

renderer.setBaseItemLabelFont(

renderer.getBaseItemLabelFont().deriveFont(14f));

renderer.setBaseItemLabelsVisible(true);

renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());

XYPlot plot = new XYPlot(dataset, domain, range, renderer);

JFreeChart chart = new JFreeChart(

"Unit Price", JFreeChart.DEFAULT_TITLE_FONT, plot, false);

return chart;

}

public static void main(String[] args) {

JFrame f = new JFrame();

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

XYDataset dataset = createDataset();

JFreeChart chart = createChart(dataset);

ChartPanel chartPanel = new ChartPanel(chart) {

@Override

public Dimension getPreferredSize() {

return new Dimension(400, 320);

}

};

f.add(chartPanel);

f.pack();

f.setLocationRelativeTo(null);

f.setVisible(true);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值