Frage

Ich bin neu in JFreeChart mit und ich bin sicher, es gibt eine einfache Lösung für mein Problem. .

PROBLEM:
Ich habe ein Diagramm, das zeigt mehr „Ereignistypen“ entlang der Datum X-Achse. Die Y-Achse zeigt die „Ereigniskategorie“. Mein Problem ist, dass nur das letzte Datum eines Ereignisses Typ wird für jede Kategorie angezeigt.

Im Beispiel unten die Grafik zeigen Datenpunkte für Ereignistyp 1 am 20. Juni (Kategorie 1) und am 10. Juni (Kategorie 2). Ich hatte auch einen Datenpunkt für 10. Juni hinzugefügt, Kategorie 1, aber der 20. Punkt Juni löscht es.

Ich glaube, ich bin Missverständnis, wie die CategoryPlot arbeitet. Verwende ich die falsche Art von Diagramm? Ich dachte, ein Punktdiagramm das Richtige sein würde, aber es akzeptiert nur numerische Werte. Ich muss auf meine Y-Achse diskreten String Kategorien.

Wenn jemand mich in die richtige Richtung zeigen kann, würden Sie wirklich meinen Tag machen. Vielen Dank für das Lesen!

-Christine

(Der folgende Code funktioniert, wie sie ist. Es ist so einfach, wie ich es machen könnte)

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);   
    }   
}  
War es hilfreich?

Lösung

Neben @ Jeff Storey Vorschläge, können Sie Inspiration erhalten von den JFreeChart Proben , und nicht übersehen, die Demo Anwendung, erhältlich über Java Web Start. Ich bin nicht sicher, folge ich Ihren Anforderungen entspricht, aber DefaultMultiValueCategoryDataset wird als „Kategorie A-Datensatz, dass für jedes Element mehrere Werte definiert.“

Nachtrag: Wenn Sie mit LineAndShapeRenderer sowohl LineAndShapeRenderer(false, true) und setBaseLinesVisible() können Linienzeichnung nicht aus.

Andere Tipps

Ich glaube, Sie verwenden die falsche Art von Daten-Set und Chart hier. Es scheint, Sie versuchen, ein Streudiagramm zu erstellen, so sollten Sie die Streudiagramm anstelle einer Kategorie Grundstück werden. In der Kategorie Handlung, da jede Reihe / Spaltenpaar nur einen einzigen Wert erhält. Also, in den ersten Aufruf, da sagen Sie das event1 / category1 Paar einen Wert von june10.getMiddleMillisecond hat dann sind Sie seinen Wert auf june20.getMiddleMillisecond ändern. Vielleicht wollen Sie auch als auch bei den Zeitreihen Plots suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top