首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFreeChart CategoryPlot覆盖类别

JFreeChart CategoryPlot覆盖类别
EN

Stack Overflow用户
提问于 2010-04-20 18:39:48
回答 2查看 4K关注 0票数 1

我刚开始使用JFreeChart,我相信我的问题有一个简单的解决方案。。

问题:

我有一个图表,显示多个“事件类型”沿日期X轴。Y轴显示“事件类别”。我的问题是,每个类别只显示事件类型的最新日期。

在下面的例子中,图表显示了事件类型1在6月20日(类别1)和6月10日(类别2)的数据点。我还为6月10日第1类添加了一个数据点,但6月20日的数据点将其删除。

我想我误解了CategoryPlot的工作方式。我是不是用错了图表?我以为散点图是票,但它只接受数值。我需要在Y轴上有离散的字符串类别。

如果有人能给我指明正确的方向,你会让我感到高兴的。感谢您的阅读!

-Christine

(下面的代码按原样工作。这是我所能做的最简单的事情)

代码语言:javascript
复制
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);   
    }   
}  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-21 02:14:08

除了@Jeff的建议之外,您还可以从JFreeChart样本获得一些灵感,不要忽视通过Java提供的演示应用程序。我不确定我是否符合您的要求,但DefaultMultiValueCategoryDataset被描述为“定义每个项的多个值的类别数据集”。

增编:如果你想坚持使用LineAndShapeRendererLineAndShapeRenderer(false, true)setBaseLinesVisible()都可以排除线条绘制。

票数 1
EN

Stack Overflow用户

发布于 2010-04-20 19:21:52

我认为您在这里使用了错误的数据集和图表类型。似乎您正在尝试创建一个散点图,因此您应该使用散点图而不是类别图。在类别图中,因为每一行/列对只获得一个值。因此,在第一个调用中,您说事件1/ call 1对的值为has 10。june20.getMiddleMillisecond,然后将其值更改为has 20.getMidleMillisecond。您可能还想看看时间序列图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2677704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档