StealIsAStrongWord
StealIsAStrongWord

Reputation: 13

XYTextAnnotation does not show up on XYPlot

I am trying to add annotations to my XYPlot; but unfortunately, they don't seem to show up.

Here is my code:

public JFreeChart createGraph() {
    int[][] audiogramR = {{250, 25}, {500, 15}, {1000, 30}, {2000, 40}, {4000, 50}, {8000, 60}};
    int[][] audiogramL = {{250, 60}, {500, 50}, {1000, 40}, {2000, 30}, {4000, 15}, {8000, 25}};
    XYSeries r = new XYSeries("Right");
    XYSeries l = new XYSeries("Left");

    for (int i = 0; i <= 5; i++) { //add data to series
        r.add(audiogramR[i][0], audiogramR[i][1]);
        l.add(audiogramL[i][0], audiogramL[i][1]);
    }
    XYSeriesCollection dataset = new XYSeriesCollection();  //add series to dataset
    dataset.addSeries(r);
    dataset.addSeries(l);

    NumberAxis yAxis = new NumberAxis("Decibels");      //create axes
    LogAxis xAxis = new LogAxis("Frequency");
    xAxis.setBase(2);

    xAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

    yAxis.setInverted(true);
    yAxis.setRange(-10, 120);

    Shape cross = ShapeUtilities.createDiagonalCross(3, 1);
    Shape outer = new Ellipse2D.Float(-3.5f, -3.5f, 7, 7);
    Shape inner = new Ellipse2D.Float(-3f, -3f, 6, 6);               //shapes for plot
    Area area = new Area(outer);
    area.subtract(new Area(inner));
    Shape ring = area;

    XYPlot plot = new XYPlot(dataset, xAxis, yAxis, new XYLineAndShapeRenderer(true, true)); //create xy plot for dataset and axes

    plot.getRenderer().setSeriesShape(1, cross);
    plot.getRenderer().setSeriesShape(0, ring);
    plot.setDomainGridlinesVisible(false);

    XYTextAnnotation label = new XYTextAnnotation("Annotation text here", 50, 1024); //create annotation
    plot.addAnnotation(label, true);

    JFreeChart chart = new JFreeChart("Audiogram", JFreeChart.DEFAULT_TITLE_FONT, plot, true);

    ChartPanel myChart = new ChartPanel(chart);
    myChart.setPreferredSize(pGraph.getSize()); //size according to my window
    myChart.setMouseWheelEnabled(false);
    pGraph.setLayout(new java.awt.BorderLayout());
    pGraph.add(myChart, BorderLayout.CENTER);   //add chart to jPanel in netbeans
    pGraph.validate();
}

which produces this:

Screenshot of graph

Evidently, there is no annotation. Any thoughts?

Upvotes: 1

Views: 110

Answers (1)

trashgod
trashgod

Reputation: 205855

As noted here,

The coordinates are specified in data space (they will be converted to Java2D space for display).

Your y value of 1024 is outside the range specified for your yAxis. As noted here, it may be useful to query the data itself for the required coordinates. In the fragment below, the series r provides the data space coordinates for the penultimate point:

double x = (double) r.getX(r.getItemCount() - 2);
double y = (double) r.getY(r.getItemCount() - 2);
XYTextAnnotation label = new XYTextAnnotation("Annotation", x, y);
plot.addAnnotation(label);

image

Upvotes: 1

Related Questions