jFreeChart LineChart ajustar Ticks

Estoy seguro de que la respuesta está aquí en alguna parte, pero realmente no puedo encontrarla.

Tengo un LineChart con muchas entradas (digamos 1000). En la gráfica puedo ver (y ajustar (ver A)) el eje Y perfectamente bien. ¡Solo el eje X me vuelve loco! Con 1000 entradas no hay número de la parte inferior de la trama.

R: Con esto puedo ajustar muy bien el eje Y. final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setRange(0.00, 1.00); rangeAxis.setTickUnit(nueva NumberTickUnit(0.2)); rangeAxis.setVerticalTickLabels(falso);

Quiero hacer lo mismo con el eje X.

Por favor, ayúdame. Muchas gracias


-> problema con la primera respuesta | Eje de dominio con 100 números y un intervalo de 50

Eje de dominio con 100 números y un intervalo de 50

preguntado el 27 de julio de 12 a las 15:07

Si pudiera proporcionar alguna información adicional y preferiblemente un ejemplo independiente (SSCCE) Es posible que podamos ayudar. He intentado usar tanto un LineChart y XYLineChart y ambos muestran números en el DomainAxis -

Hola, la única respuesta que obtuve fue bastante agradable. John realmente entendió mi problema y creo que prácticamente lo resolvió. El único problema que queda es que solo veo "..." donde debería haber un 100, 200, etc. -

1 Respuestas

Me temo que tienes que modificar el código de JfreeChart, ¿es genial Opensource?

Tengo este problema antes para mi BarChart. Lo que hice fue personalizar la marca en x-Axis. Solo implementé esto solo para CategoryAxis.java. Espero que esto pueda arrojar algo de luz sobre ti.

Tenga en cuenta la variable "tickInterval", agregué esta propiedad a la clase, por ejemplo, tiene 1000 números, si establece tickInterval como 99, solo aparecerán 0, 100, 200, 300 ...

adiós, mi versión de freechart es 1.0.5

public List refreshTicks(Graphics2D g2, 
                         AxisState state,
                         Rectangle2D dataArea,
                         RectangleEdge edge) {

    List ticks = new java.util.ArrayList();

    // sanity check for data area...
    if (dataArea.getHeight() <= 0.0 || dataArea.getWidth() < 0.0) {
        return ticks;
    }

    CategoryPlot plot = (CategoryPlot) getPlot();
    List categories = plot.getCategoriesForAxis(this);
    double max = 0.0;

    if (categories != null) {
        CategoryLabelPosition position 
                = this.categoryLabelPositions.getLabelPosition(edge);
        float r = this.maximumCategoryLabelWidthRatio;
        if (r <= 0.0) {
            r = position.getWidthRatio();   
        }

        float l = 0.0f;
        if (position.getWidthType() == CategoryLabelWidthType.CATEGORY) {
            l = (float) calculateCategorySize(categories.size(), dataArea, 
                    edge);  
        }
        else {
            if (RectangleEdge.isLeftOrRight(edge)) {
                l = (float) dataArea.getWidth();   
            }
            else {
                l = (float) dataArea.getHeight();   
            }
        }
        int categoryIndex = 0;
        Iterator iterator = categories.iterator();
        while (iterator.hasNext()) {
            Comparable category = (Comparable) iterator.next();
            if(categoryIndex>0 && tickInterval>0)
            {
                if((categoryIndex+1) % (tickInterval+1) > 0)
                {
                    category = "";
                }
            }

            TextBlock label = null;
            if(tickInterval> 0)
            {
                label = this.createSingleLabel(category, l * r, edge, g2);
            }
            else
            {
                label = createLabel(category, l * r, edge, g2);
            }
            if (edge == RectangleEdge.TOP || edge == RectangleEdge.BOTTOM) {
                max = Math.max(max, calculateTextBlockHeight(label, 
                        position, g2));
            }
            else if (edge == RectangleEdge.LEFT 
                    || edge == RectangleEdge.RIGHT) {
                max = Math.max(max, calculateTextBlockWidth(label, 
                        position, g2));
            }
            Tick tick = new CategoryTick(category, label, 
                    position.getLabelAnchor(), position.getRotationAnchor(), 
                    position.getAngle());
            ticks.add(tick);
            categoryIndex = categoryIndex + 1;
        }
    }
    state.setMax(max);
    return ticks;

}

Respondido 27 Jul 12, 16:07

Hola, Gracias por tu ayuda. Casi funciona, pero algo parece estar mal todavía. Obtengo un intervalo, pero la etiqueta consta solo de tres puntos, no de números reales. como 10/20/30...etc.- jackie

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.