在 Java 17 中使用 JFreeChart 创建 `TimeSeriesChart` 时,若要将凌晨零点的小时时间替换为日期,可通过自定义 `DateAxis` 的日期格式实现。以下是示例代码: ```java import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.data.time.Hour; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import java.awt.*; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class TimeSeriesChartExample { public static void main(String[] args) { // 创建时间序列 TimeSeries series = new TimeSeries("Sample Data"); // 添加数据 Calendar calendar = Calendar.getInstance(); for (int i = 0; i < 24; i++) { calendar.set(Calendar.HOUR_OF_DAY, i); Date date = calendar.getTime(); series.add(new Hour(date), Math.random() * 100); } // 创建时间序列数据集 TimeSeriesCollection dataset = new TimeSeriesCollection(series); // 创建时间序列图表 JFreeChart chart = ChartFactory.createTimeSeriesChart( "Time Series Chart", "Time", "Value", dataset, true, true, false ); // 获取图表的绘图区域 XYPlot plot = chart.getXYPlot(); // 获取 X 轴 DateAxis dateAxis = (DateAxis) plot.getDomainAxis(); // 自定义日期格式 dateAxis.setDateFormatOverride(new SimpleDateFormat("HH:mm")); dateAxis.setTickUnit(new org.jfree.chart.axis.DateTickUnit(org.jfree.chart.axis.DateTickUnitType.HOUR, 1)); // 自定义凌晨零点的日期格式 dateAxis.setTickMarkPosition(DateAxis.TickMarkPosition.MIDDLE); dateAxis.setTickLabelGenerator(new org.jfree.chart.axis.DateTickUnitFormat(new org.jfree.chart.axis.DateTickUnit(org.jfree.chart.axis.DateTickUnitType.HOUR, 1), new SimpleDateFormat("HH:mm"), new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyy-MM-dd"))); // 显示图表 ChartFrame frame = new ChartFrame("Time Series Chart", chart); frame.pack(); frame.setVisible(true); } } ``` 代码解释 1. 创建时间序列:使用 `TimeSeries` 类创建一个时间序列,并添加一些随机数据。 2. 创建时间序列数据集:使用 `TimeSeriesCollection` 类将时间序列包装成数据集。 3. 创建时间序列图表:使用 `ChartFactory.createTimeSeriesChart` 方法创建一个时间序列图表。 4. 自定义日期格式:通过 `DateAxis` 的 `setDateFormatOverride` 方法设置默认的日期格式。 5. 自定义凌晨零点的日期格式:使用 `DateTickUnitFormat` 类自定义凌晨零点的日期格式。 额外注意的逻辑点 1. 确保在项目中正确引入 JFreeChart 库,否则代码将无法编译。 2. 日期格式的设置应根据实际需求进行调整,不同的日期格式可能会影响图表的显示效果。 3. 当数据量较大时,可能需要调整 `DateTickUnit` 的间隔,以避免刻度标签过于密集。 [2025-06-23 15:11:43 | AI写代码神器 | 824点数解答]