我是使用JFreeChart的新手,我確信有一個簡單的解決方案來解決我的問題。 。JFreeChart CategoryPlot覆蓋類別
問題:
我有一個圖表,顯示了多個「事件類型」沿日期X軸。 Y軸顯示「事件類別」。我的問題是每個類別只顯示事件類型的最新日期。
在以下示例中,圖表顯示了6月20日(類別1)和6月10日(類別2)的事件類型1的數據點。我還在6月10日增加了一個數據點,類別1,但6月20日的數據點將其刪除。
我想我誤解了CategoryPlot是如何工作的。我是否使用錯誤的圖表類型?我認爲散點圖是票據,但它只接受數值。我需要在我的Y軸上有不連續的字符串類別。
如果任何人都能指引我走向正確的方向,那麼你真的會讓我有一天。謝謝閱讀!
-Christine
(下面的代碼工作原樣。這很簡單,只要我可以使它)
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);
}
}
謝謝!使用DefaultMultiValueCategoryDataset讓我有一半的工作,另一件事是使用ScatterRenderer而不是LineAndShapeRenderer。我現在遇到的問題是自動調整過大狹窄,但我必須進一步研究,再次感謝你們的幫助!:) -Christine – Chris 2010-04-22 12:35:01
優秀!我沒有使用'ScatterRenderer',但我在上面的'LineAndShapeRenderer'上評論過。另見http://stackoverflow.com/questions/2081676/looking-for-open-source-tool-for-drawing-charts-in-java/2082297#2082297 – trashgod 2010-04-22 15:32:59