jfreechart,日期为x标签

fnx2tebb  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(319)

我正在实现一个从covid-19信息网检索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);
     }
 }

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

目前,我将这些值存储在arraylist中(仅用于测试)。我知道我需要存储日期和案例数,但我不知道应该使用哪种类型的数据集。
我想画一条线和一个条形图。我成功做到了:

但正如我所说的,我想找到一种方法,将日期显示为x标签,如示例中所示。
我试过使用categorydataset,但是它会打印每个x标签,所以根本不可读。我知道xyseries可以像前面一样完成这个技巧,但是我不知道如何插入一个字符串作为标签而不是整数。
希望我能解释清楚。

f2uvfpb9

f2uvfpb91#

我设法用TimesPeriesCollection做了这件事

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);

和输出:

我不知道这是不是最好的解决办法,但确实有效。

相关问题