2014-10-29 65 views
0

我需要制作垂直轴上有日期的条形图。它会显示软件上次使用的时间戳。JFreeChart - 带垂直轴的BarChart DateAxis

它可以看起来像标准条形图,但在纵轴上,我需要日期而不是数字。

感谢您的帮助

编辑: 这里正在例如,创建图表,看起来几乎就像我想要的。

private void createSoftwareLastUsageChart() throws ParseException { 
    Date from = new Date(new Date().getTime() - (15 * 24 * 60 * 60 * 1000L)); 
    List<SwLastUsed> databaseStatisticsItems = getTestData(); 

    DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
    for (SwLastUsed soft : databaseStatisticsItems) { 
     dataset.addValue(soft.lastUsed.getTime() - from.getTime(), "Software", soft.name); 
    } 

    JFreeChart chart = ChartFactory.createBarChart("Software last usage", "Values", "Time", dataset, PlotOrientation.VERTICAL, false, false, false); 
    CategoryPlot plot = (CategoryPlot) chart.getPlot(); 

    CategoryAxis domainAxis = (CategoryAxis) plot.getDomainAxis(); 
    domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); 
    JFrame window = new JFrame(); 

    JPanel pnl = new JPanel(); 
    ChartPanel chPnl = new ChartPanel(chart); 
    chPnl.setPreferredSize(new Dimension(800, 600)); 
    pnl.add(chPnl); 
    window.setContentPane(pnl); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.pack(); 
    window.setVisible(true); 
} 

private List<SwLastUsed> getTestData() throws ParseException { 
    List<SwLastUsed> sw = new ArrayList<>(); 
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    sw.add(new SwLastUsed("CHROME", format.parse("2014-11-03 11:24:20.456+01"))); 
    sw.add(new SwLastUsed("INTERNET_EXPLORER 10.* x64", format.parse("2014-11-03 11:15:28.124+01"))); 
    sw.add(new SwLastUsed("INTERNET_EXPLORER 11.*", format.parse("2014-11-03 11:15:28.124+01"))); 
    sw.add(new SwLastUsed("INTERNET_EXPLORER 10.* x86", format.parse("2014-11-03 11:08:35.359+01"))); 
    sw.add(new SwLastUsed("FIREFOX x86", format.parse("2014-10-21 09:38:17.109+02"))); 
    sw.add(new SwLastUsed("SAFARI", format.parse("2014-10-20 15:00:26.526+02"))); 
    sw.add(new SwLastUsed("FIREFOX x64", format.parse("2014-10-20 14:55:47.886+02"))); 
    return sw; 
} 

private class SwLastUsed { 
    public String name; 
    public Date lastUsed; 

    public SwLastUsed(String name, Date lastUsed) { 
     this.name = name; 
     this.lastUsed = lastUsed; 
    } 
} 

我想要做的一件事是将左侧垂直轴上的时间值以毫秒为单位更改为日期时间格式。

回答

2

使用ChartFactory.createXYBarChart()和对orientation参数dateAxis参数和PlotOrientation.HORIZONTAL指定true

+0

谢谢你的回答,XYBarChart看起来不错。但是我需要将Date值作为一个取决于(软件)类别的值。我知道如何获取日期值的横轴和类别的垂直。我怎样才能倒置它们? – Daphnis 2014-10-30 10:00:25

+0

不是'PlotOrientation.HORIZONTAL'做你想要的吗? – trashgod 2014-10-30 10:35:44

+0

不,不。我想这样的图表:[链接](https://drive.google.com/file/d/0B95y14BIMoxvMGkxT2pzd0cxS2s/view?usp=sharing)但在垂直轴上的日期值而不是简单的数字。该图表必须显示多个软件的最后使用情况。 – Daphnis 2014-10-30 10:50:11