Pregunta

Específicamente, estoy buscando agregar anotaciones de texto a ubicaciones específicas en un JFreeChart que se está enviando a un archivo png para uso web. ¿Se pueden agregar las anotaciones a los gráficos circulares? He podido agregar con éxito anotaciones a XYPlots, pero no sé cómo superponer o agregar una a un PiePlot.

Mi tarea completa es usar PiePlot para crear una especie de reloj. Hasta ahora todo ha funcionado muy bien, pero ahora necesito agregar etiquetas en las ubicaciones de las 12, 3, 6 y 9 en punto y estoy completamente perplejo.

Adán

¿Fue útil?

Solución 2

Después de una búsqueda bastante extenuante, no creo que esto sea posible actualmente (JFreeChart 1.0.13). Las posibles opciones son:

Cree un segundo gráfico con un XYPlot para generar una segunda imagen con las anotaciones necesarias. Superponga esta imagen en la página. Esta opción es mala porque duplica la cantidad de imágenes de gráficos que se cargarán.

Establezca la imagen como fondo en la página y HTML el texto sobre la imagen. Mal porque no es mantenible y causa un dolor de cabeza en la transferencia de datos.

Personalmente, voy a encontrar otra forma de comunicar la información en el título, pero quería publicar mis hallazgos para la siguiente persona. Adán

Otros consejos

Un poco de una vieja pregunta, pero así es como hice algo similar (anotación en las posiciones 1, 2, 3, ... en punto) usando un diagrama polar. Utiliza un ChoiceFormatter y la NumberTickUnit:

    final JFreeChart chart = ChartFactory.createPolarChart(
            "HAPI Hourly Usage (UTC)", ds, true, true, false);
    final PolarPlot plot = (PolarPlot) chart.getPlot();

    // Create a ChoiceFormat to map the degrees to clock positions
    double[] limits = new double[12];
    String[] formats = new String[12];
    limits[0] = 0;
    formats[0] = "12";

    // degrees = 360/12
    for (int i = 1; i < limits.length; i++) {
        limits[i] = degrees * (i);
        formats[i] = Integer.toString(i);
    }
    ChoiceFormat clock = new ChoiceFormat(limits, formats);

    TickUnit tickUnit = new NumberTickUnit(degrees, clock);

    // now configure the plot
    plot.setAngleTickUnit(tickUnit); // sets the ticks
    plot.setAngleLabelsVisible(true); // makes the labels visible
    plot.setAngleLabelPaint(Color.LIGHT_GRAY); // user choice
    plot.setAngleGridlinesVisible(true); // must set this to display the
                                         // labels
    plot.setAngleGridlinePaint(Color.BLACK); // plot's background color
                                             // (makes lines invisible)
    plot.setRadiusGridlinesVisible(false); //turn off the radius value circles
    ValueAxis axis = plot.getAxis();
    axis.setTickLabelsVisible(false); //turn off the radius value labels

termina pareciéndose a http://img522.imageshack.us/img522/6693/ hapihours.jpg

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top