有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

日期为x标签的java 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可以完成前面所示的功能,但我不知道如何插入字符串作为标签而不是整数

希望我能解释清楚


共 (1) 个答案

  1. # 1 楼答案

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

    和输出:

    enter image description here

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