2014-10-29 53 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