Display labels on the coordinates in a line chart

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
alejogabriel
Posts: 1
Joined: Mon Sep 02, 2013 9:33 pm
antibot: No, of course not.

Display labels on the coordinates in a line chart

Post by alejogabriel » Mon Sep 02, 2013 9:52 pm

Hello, I use the version 1.0.9

I need you to see two graphs of lines in the same graph and coordinates a value in string format for example "MED".

Encoding I can only see one at a time and not both
any idea?
Thank

alejo


Code: Select all

package ar.com.osde.component.chart.impl;

import java.awt.Color;
import java.util.ArrayList;
import java.util.List;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.labels.XYItemLabelGenerator;
import org.jfree.chart.plot.DatasetRenderingOrder;
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.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;

public class GraficoEtiquetas2 extends ApplicationFrame {
	
	public GraficoEtiquetas2(String title) {
        super(title);
        
        XYDataset dataset = createDataset();
        XYDataset dataset2 = createDataset2();
        
        final JFreeChart chart = createOverlaidChart(dataset, dataset2);
        final ChartPanel panel = new ChartPanel(chart, true, true, true, true, true);
        panel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(panel);
	}


    private static XYDataset createDataset2() {
    	
        LabeledXYDataset ds = new LabeledXYDataset();
        ds.add(11,  0, "");
        ds.add(12, 68, "XXXX");
        ds.add(13, 65, "");
        ds.add(14, 67, "");
        ds.add(15, 69, "");
        ds.add(16, 60, "");
        ds.add(17, 83, "");
        ds.add(18, 86, "");
        ds.add(19, 70, "");
        ds.add(20, 60, "");
        ds.add(21, 55, "");
        ds.add(22, 54, "");
        ds.add(23, 50, "");
        return ds;
    }

    private static XYDataset createDataset() {
        LabeledXYDataset ds = new LabeledXYDataset();
        ds.add(11,  0, "");
        ds.add(12, 38, "MED");
        ds.add(13, 35, "MED");
        ds.add(14, 37, "");
        ds.add(15, 39, "");
        ds.add(16, 30, "FED.");
        ds.add(17, 53, "");
        ds.add(18, 56, "");
        ds.add(19, 40, "MED./FED.");
        ds.add(20, 30, "MED");
        ds.add(21, 25, "FED.");
        ds.add(22, 24, "");
        ds.add(23, 20, "MED");
        return ds;
    }
    
    private static class LabeledXYDataset extends AbstractXYDataset {

        /**
		 * 
		 */
		private static final long serialVersionUID = -5051021615818027668L;
		private static final int N = 26;
		
        private List<Number> x = new ArrayList<Number>(N);
        private List<Number> y = new ArrayList<Number>(N);
        private List<String> label = new ArrayList<String>(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";
        }

        public int getItemCount(int series) {
            return label.size();
        }

        public Number getX(int series, int item) {
            return x.get(item);
        }

        public Number getY(int series, int item) {
            return y.get(item);
        }
    }

    private static class LabelGenerator implements XYItemLabelGenerator {

        public String generateLabel(XYDataset dataset, int series, int item) {
            LabeledXYDataset labelSource = (LabeledXYDataset) dataset;
            return labelSource.getLabel(series, item);
        }

    }

    @SuppressWarnings("unused")
	private static JFreeChart createOverlaidChart(final XYDataset dataset, final XYDataset dataset2) {
    	
    	
        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.red.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);
        
        XYItemRenderer renderer2 = new XYLineAndShapeRenderer();
        renderer2.setBaseItemLabelGenerator(new LabelGenerator());
        renderer2.setBaseItemLabelPaint(Color.green.brighter());
        renderer2.setBasePositiveItemLabelPosition(
            new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER));
        renderer2.setBaseItemLabelFont(
            renderer2.getBaseItemLabelFont().deriveFont(14f));
        renderer2.setBaseItemLabelsVisible(true);
        renderer2.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
        
        
        
        plot.setDataset(dataset2);
        //plot.setRenderer(1, renderer2);
//        plot.setOutlineVisible(true);
        
        plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
        

        JFreeChart chart = new JFreeChart(
            "Unit Price", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
        return chart;
    }

    public static void main(String[] args) {
    	
        final GraficoEtiquetas2 demo = new GraficoEtiquetas2("Overlaid XYPlot Demo");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
    
}

Locked