带有日期作为 x 标签的 JFreeChart
JFreeChart with date as x labels
我正在实施一个从 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);
}
}
现在我想制作一个图表来显示数据。像这样:
目前我将值存储在 ArrayList 中(仅用于测试)。我知道我需要存储日期和病例数,但我不知道应该使用哪种类型的数据集。
我想制作折线图和条形图。我已经做到了:
但正如我所说,我想找到一种方法将日期显示为示例中所示的 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);
}
}
然后在图表上class:
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);
并输出:
我不知道这是否是最佳解决方案,但它确实有效。
我正在实施一个从 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);
}
}
现在我想制作一个图表来显示数据。像这样:
目前我将值存储在 ArrayList 中(仅用于测试)。我知道我需要存储日期和病例数,但我不知道应该使用哪种类型的数据集。
我想制作折线图和条形图。我已经做到了:
但正如我所说,我想找到一种方法将日期显示为示例中所示的 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);
}
}
然后在图表上class:
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);
并输出:
我不知道这是否是最佳解决方案,但它确实有效。