Pregunta

Soy nuevo en el uso JFreeChart y estoy seguro de que hay una solución simple para mi problema. .

PROBLEMA:
Tengo un gráfico que "tipos de eventos" muestra múltiples a lo largo del eje de fecha X. El eje Y muestra la "categoría de eventos". Mi problema es que sólo la última fecha de un tipo de evento se muestra para cada categoría.

En el ejemplo debajo de los puntos de datos gráfico muestra para Tipo de evento 1 a junio 20ma (Categoría 1) y a junio décima (categoría 2). También había añadido un punto de datos para el 10 de junio de categoría 1, pero el punto vigésima de junio de borra.

creo que estoy mal entendido cómo el CategoryPlot está trabajando. Estoy utilizando el tipo incorrecto de la carta? Pensé que un gráfico de dispersión sería el billete pero sólo acepta valores numéricos. Es necesario disponer de categorías discretas de cuerda en mi eje.

Si alguien me puede apuntar en la dirección correcta, que sería realmente hacer mi día. Gracias por leer!

-Christine

(El código de abajo funciona como está. Es tan simple como podría hacerlo)

import java.awt.Dimension;

import javax.swing.JPanel;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.time.Day;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class EventFrequencyDemo1 extends ApplicationFrame   
{   
    public EventFrequencyDemo1(String s)   
    {   
        super(s);   
        CategoryDataset categorydataset = createDataset();   
        JFreeChart jfreechart = createChart(categorydataset);   
        ChartPanel chartpanel = new ChartPanel(jfreechart);   
        chartpanel.setPreferredSize(new Dimension(500, 270));   
        setContentPane(chartpanel);   
    }   

    private static JFreeChart createChart(CategoryDataset categorydataset)   
    {   
        CategoryPlot categoryplot = new CategoryPlot(categorydataset, new CategoryAxis("Category"), new DateAxis("Date"), new LineAndShapeRenderer(false, true));
        categoryplot.setOrientation(PlotOrientation.HORIZONTAL);
        categoryplot.setDomainGridlinesVisible(true);
        return new JFreeChart(categoryplot);   
    }   

    private static CategoryDataset createDataset()   
    {   
        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();   
        Day june10 = new Day(10, 6, 2002);   
        Day june20 = new Day(20, 6, 2002);
        // This event is overwritten by June20th
        defaultcategorydataset.setValue(new Long(june10.getMiddleMillisecond()), "Event Type 1", "Category 1");   
        defaultcategorydataset.setValue(new Long(june10.getMiddleMillisecond()), "Event Type 1", "Category 2");   
        // Overwrites the previous June10th event
        defaultcategorydataset.setValue(new Long(june20.getMiddleMillisecond()), "Event Type 1", "Category 1");   
        defaultcategorydataset.setValue(new Long(june20.getMiddleMillisecond()), "Event Type 2", "Category 2");   
        return defaultcategorydataset;   
    }   

    public static JPanel createDemoPanel()   
    {   
        JFreeChart jfreechart = createChart(createDataset());   
        return new ChartPanel(jfreechart);   
    }   

    public static void main(String args[])   
    {   
        EventFrequencyDemo1 eventfrequencydemo1 = new EventFrequencyDemo1("Event Frequency Demo");   
        eventfrequencydemo1.pack();   
        RefineryUtilities.centerFrameOnScreen(eventfrequencydemo1);   
        eventfrequencydemo1.setVisible(true);   
    }   
}  
¿Fue útil?

Solución

Además de las sugerencias de @ Jeff Storey, se puede conseguir un poco de inspiración de las muestras JFreeChart , y no pasar por alto el href="http://www.jfree.org/jfreechart/jfreechart-1.0.13-demo.jnlp" rel="nofollow noreferrer"> demostración aplicación , disponibles a través de Java web Start. No estoy seguro de entender sus necesidades, pero DefaultMultiValueCategoryDataset se describe como "Una categoría conjunto de datos que define múltiples valores para cada elemento."

Adición: Si desea seguir con LineAndShapeRenderer , tanto LineAndShapeRenderer(false, true) y setBaseLinesVisible() pueden impedir dibujo de líneas.

Otros consejos

creo que está utilizando el tipo incorrecto de conjunto de datos y el gráfico aquí. Parece que están tratando de crear un gráfico de dispersión, por lo que debe utilizar el gráfico de dispersión en lugar de una parcela categoría. En la categoría de trama, ya que cada par de filas / columnas sólo obtiene un único valor. Así, en la primera convocatoria, que está diciendo el par event1 / categoría1 tiene un valor de june10.getMiddleMillisecond entonces usted está cambiando su valor a june20.getMiddleMillisecond. También puede ser que desee ver en los diagramas de series de tiempo también.

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