java - 带有日期作为 x 标签的 JFreeChart

标签 java charts jfreechart

我正在实现一个从 COVID-19 info web 检索 CSV 数据的应用程序.

我制作了一个解析器,可以获取特定地点(加那利岛)每天的病例数。

String url = "https://cnecovid.isciii.es/covid19/resources/datos_ccaas.csv";
String[] contents = HTTPFileDownloader.downloadFromURL(url).split("\n");

for(String i : contents) {
    if(isCanaryIslandData(i)) {
        String[] line = i.split(",");
        String[] date = line[1].split("-");    // "YYYY-MM-DD"

        int cases = Integer.parseInt(line[2]);

        casesPerDay.add(cases);
     }
 }

现在我想制作一个图表来显示数据。像这样:

Desired Output

目前我将值存储在 ArrayList 中(仅用于测试)。我知道我需要存储日期和病例数,但我不知道应该使用哪种类型的数据集。

我想制作折线图和条形图。我已经设法做到了:

enter image description here

但正如我所说,我想找到一种方法将日期显示为示例中所示的 x 标签。

我尝试使用 CategoryDataset,但它会打印每个 x 标签,因此根本无法读取。我知道 XYSeries 可以如前所示执行此操作,但我不知道如何插入字符串而不是整数作为标签。

希望我解释得很好。

最佳答案

我设法使用 TimeSeriesCollection 做到了

TimeSeries series = new TimeSeries("Cases per Day");
String url = "https://cnecovid.isciii.es/covid19/resources/datos_ccaas.csv";
String[] contents = HTTPFileDownloader.downloadFromURL(url).split("\n");

    for(String i : contents) {
        if(isCanaryIslandData(i)) {
            String[] line = i.split(",");
            String[] date = line[1].split("-");

            int year = Integer.parseInt(date[0]);
            int month = Integer.parseInt(date[1]);
            int day = Integer.parseInt(date[2]);

            int cases = Integer.parseInt(line[2]);

            series.add(new Day(day, month, year), cases);

        }
    }

然后在图表类上:

    TimeSeriesCollection dataset = new TimeSeriesCollection();

    dataset.addSeries(series);

    JFreeChart chart = ChartFactory.createXYLineChart(
               "Line Chart",
               "x",
               "y",
               dataset,
               PlotOrientation.VERTICAL,
               true,
               true,
               false);

   ChartPanel chartPanel = new ChartPanel(chart);
   chartPanel.setMouseWheelEnabled(true);
   chartPanel.setPreferredSize(new java.awt.Dimension(560,367));

   XYPlot plot = (XYPlot) chart.getPlot();
   DateAxis dateAxis = new DateAxis();
   dateAxis.setDateFormatOverride(new SimpleDateFormat("dd-MM-yyyy"));
   plot.setDomainAxis(dateAxis);

并输出:

enter image description here

我不知道这是否是最佳解决方案,但它确实有效。

关于java - 带有日期作为 x 标签的 JFreeChart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65425147/

相关文章:

SVG 饼图仅适用于 Chrome,不适用于 Firefox

charts - 如何从子图表获取基本chart.yaml版本

java - 如何在编码为 PNG 之前调整 JFreeChart 的大小

JavaFX : Paint program with Canvas

java - 如何在 Spring Data JPA 中干净地捕获 DAO 服务层异常

extjs - Ext 图表自动调整大小

java - 如何在 JFreeChart 时间序列图中设置日期刻度的最大标签线

java - 如何使用 Action 监听器从按钮获取背景颜色

java - 寻找基于终端的 IDE 以通过 SSH 工作 - Java

java - 如何使用 JFreeChart 准备数据集以直方图的形式显示?