Domanda

Sono nuovo di utilizzare JFreeChart e sono sicuro che ci sia una semplice soluzione al mio problema. .

PROBLEMA:
Ho un grafico che mostra più "eventi tipi" lungo l'asse X data. L'asse Y mostra la "categoria di eventi". Il mio problema è che solo l'ultima data di un tipo di evento viene mostrato per ogni categoria.

Nell'esempio riportato di seguito i punti del grafico mostra i dati per il tipo di evento 1 al 20 giugno (categoria 1) e al 10 giugno (categoria 2). Avevo anche aggiunto un punto dati per il 10 Giugno, categoria 1 ma il punto 20 giugno cancella.

Penso di equivoco come il CategoryPlot sta lavorando. Sto usando il tipo sbagliato di grafico? Ho pensato che un grafico a dispersione sarebbe il biglietto, ma accetta solo valori numerici. Ho bisogno di avere discreti categorie stringa sul mio Y.

Se qualcuno mi può puntare nella giusta direzione, si sarebbe davvero fare il mio giorno. Grazie per la lettura!

-Christine

(Il codice qui sotto funziona così com'è. E 'semplice come ho potuto fare)

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);   
    }   
}  
È stato utile?

Soluzione

Oltre ai suggerimenti di @Jeff Storey, si può ottenere qualche ispirazione dai campioni JFreeChart , e non trascurare il href="http://www.jfree.org/jfreechart/jfreechart-1.0.13-demo.jnlp" rel="nofollow noreferrer"> Demo applicazione DefaultMultiValueCategoryDataset è descritto come "Una categoria di dati che definisce più valori per ciascun elemento."

Addendum: Se si vuole attaccare con LineAndShapeRenderer , sia LineAndShapeRenderer(false, true) e setBaseLinesVisible() possono precludere disegno delle linee.

Altri suggerimenti

Penso che si sta utilizzando il tipo sbagliato di set di dati e il grafico qui. Sembra che si sta tentando di creare un grafico a dispersione, quindi si dovrebbe utilizzare il grafico a dispersione, invece di un complotto categoria. Nella trama categoria, perché ogni coppia riga / colonna ottiene solo un singolo valore. Così, nel primo bando, che stai dicendo la coppia EVENT1 / category1 ha un valore di june10.getMiddleMillisecond allora si sta cambiando il suo valore a june20.getMiddleMillisecond. Si potrebbe anche voler guardare le trame della serie tempo pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top