JFreeChart:使用 java.time.LocalDate 或 java.time.LocalDateTime 创建图表

2023-12-04

java.util.Date非常容易出错。它死了。长命java.time.*.

Given a Map<LocalDate, Integer> dateToCountMap,我如何创建一个JFreeChart显示每个日期的计数的图表?


如果是LocalDate,您可以通过构造相应的时间序列图来创建时间序列图Day, 如下所示。

LocalDate ld = entry.getKey();
Day d = new Day(ld.getDayOfMonth(), ld.getMonthValue(), ld.getYear());
series.add(d, entry.getValue());

如果您有相关的时区数据,则可以在构造时使用它Day。类似的方法可用于LocalDateTime和任何所需的混凝土RegularTimePeriod。另请参阅所示方法here and here,给定一个Instant。此外,自定义实现XYDataset, seen here,可以简单地将结果转换为toEpochMilli()并从返回它getX().

image


import java.awt.Dimension;
import java.awt.EventQueue;
import java.text.DateFormat;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;

/**
 * @see https://stackoverflow.com/a/66713994/230513
 * @see https://stackoverflow.com/a/12481509/230513
 */
public class XYTest {

    private static final int N = 16;

    private XYDataset createDataset() {
        long t = LocalDate.now().toEpochDay();
        Map<LocalDate, Integer> dateToCountMap = new HashMap<>();
        for (int i = 0; i < N; i++) {
            dateToCountMap.put(LocalDate.ofEpochDay(t + i), (int) Math.pow(i, 1.61));
        }
        TimeSeries series = new TimeSeries("Data)");
        for (Map.Entry<LocalDate, Integer> entry : dateToCountMap.entrySet()) {
            LocalDate ld = entry.getKey();
            Day d = new Day(ld.getDayOfMonth(), ld.getMonthValue(), ld.getYear());
            series.add(d, entry.getValue());
        }
        return new TimeSeriesCollection(series);
    }

    private JFreeChart createChart(final XYDataset dataset) {
        JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "Test", "Day", "Value", dataset, false, false, false);
        XYPlot plot = (XYPlot) chart.getPlot();
        DateAxis domain = (DateAxis) plot.getDomainAxis();
        domain.setDateFormatOverride(DateFormat.getDateInstance());
        return chart;
    }

    static void create() {
        JFrame frame = new JFrame("Bar Chart");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        XYTest xyTest = new XYTest();
        XYDataset dataset = xyTest.createDataset();
        JFreeChart chart = xyTest.createChart(dataset);
        ChartPanel chartPanel = new ChartPanel(chart) {

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(800, 300);
            }
        };
        frame.add(chartPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(XYTest::create);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JFreeChart:使用 java.time.LocalDate 或 java.time.LocalDateTime 创建图表 的相关文章

随机推荐

  • 如何调试已部署的网站

    这个问题有点类似于我发布的上一个问题 我在服务器上部署了一个 net 网站 在某些情况下 网站会倒塌 具体来说 当我使用特定的 dns 条目从我的 PC 具有 Visual Studio 浏览到 Web 服务器的网站时 因此 我想在我的 P
  • 德尔福 FMX And​​roid 应用程序。如何打开短信窗口

    如何在 Android 手机上使用预先输入的消息文本和收件人号码打开短信服务 SMS 窗口 在手册中我只找到电话拨号器 PhoneDialerService Call edtTelephoneNumber Text 它允许拨打电话 但不允许
  • 从 JS 更新时未检测到 Blazor 双向绑定

    我有一个简单的双向绑定组件
  • 使用 SSHj 进行 SSH 端口转发

    我正在尝试创建一个隧道来使用防火墙后面支持 SSH 的服务 我想要一个完整的java解决方案 但我似乎无法让它工作 我找到了这个github 片段并基于此 我创建了以下代码来保留给我隧道的后台线程 property on surroundi
  • 如何使用基类对象调用派生函数

    class Parent public int GetNo return 1 class Child Parent public Child public int GetNo return 2 Parent p new Child p Ge
  • 删除 Ruby 数组中冗余或重复的元组

    想象一下以下 Ruby 数组 9 9 5 5 5 2 9 9 删除冗余元组的最简单方法是什么 产生如下输出 9 5 2 9 uniq不正确 因为它正在检查整个数组 输入的顺序很重要 必须保留 有没有一个简单的方法来解决这个问题 Thanks
  • SSE 将整数加载到 __m128 中

    gcc 的内在加载 4 是什么ints into m128和 8 个整数 m256 对齐 未对齐 关于什么unsigned ints 使用英特尔的 SSE 内部信息 您正在寻找的是 mm load si128 mm loadu si128
  • Url 编码和 HTML 编码之间的区别

    和有什么区别网址编码 and a HTML 编码 HTML 编码对 HTML 文档中使用的字符串中的特殊字符进行转义 以防止与 HTML 元素混淆 例如更改
  • 如何使用 Chartkick.js 隐藏轴

    我在用https github com ankane vue chartkick绘制 Vue 图表 但看起来它没有说明如何从该文档中隐藏轴 有谁知道如何在这个图书馆中做到这一点 提前致谢 图表组件有一个库属性 允许您自定义图表的选项 要隐藏
  • 使用 XIB 文件加载 UITableViewCell 子类

    我无法获取我的CustomTableViewCell 一个子类UITableViewCell出现在我的表格视图中 我使用 xib 来表示该单元格 但我假设数据源委托的代码不会更改 我确保在表视图单元 XIB 内设置相同的重用标识符 我将问题
  • 使用 gsub() 删除 R 中字母之间多余的空格

    关于如何删除单词之间多余的空格 有很多答案 这非常简单 但是 我发现删除多余的空格within言语要困难得多 作为一个可重现的示例 假设我有一个如下所示的数据向量 x lt c L L C P O BOX 123456 NEW YORK 我
  • AssertionError:视图函数映射正在覆盖现有端点函数

    我不知道如何解决使用 Flask 时从 Python 代码中得到的这个问题 app route addEvent methods POST def addEvent app route deleteEvent methods POST de
  • 使用 R 中的 ggplot2 绘制带有单独椭圆的散点图中的点

    My dataset is formed by 4 columns as shown below 左边两列代表地理结构的坐标XY 左边两列代表 每个 地理单元的大小 南北直径和东西直径 我想以图形方式表示一个散点图 在其中绘制所有坐标并在每
  • vuejs3 I18n 和组合 API

    我现在正在 vueJS 中做一个前端界面 并且目前正在使用 vuejs 3 和 i18n i18n 的实现按正常方式工作得很好 但是当我想将它与组合 API 一起使用时 就会出现问题 所以我做了什么 我的 main js 看起来像这样 co
  • 图解分析器 - 如何将手臂添加到我的流程图中?

    对于我的流程图 我有一个详细说明数据流的垂直图表 然而 在向下的箭头上 我想添加侧箭头来描述丢失的数据的去向 我该怎么做呢 我在任何文档和示例中都看不到它 因为它往往涉及更复杂的事情 而且我知道这是一项非常基本的任务 library Dia
  • Maven循环依赖

    我有一个模块化的 Maven 项目 其中两个模块 BIZ 和 EJB 包含如下内容 PART OF BIZ Module public interface MyInterface public void foo public class I
  • 将参数传递给 JDBCPreparedStatement

    我正在尝试为我的程序制作验证类 我已经建立了与 MySQL 数据库的连接 并且已经将行插入到表中 该表包括firstName lastName and userID字段 现在我想通过构造函数的参数选择数据库中的特定行 import java
  • Swift 泛型函数无法将类型的值转换为预期的参数类型

    我尝试创建通用函数 func importArray
  • Pandas groupby 值与 bin

    这似乎是一个简单的问题 但我需要你的帮助 例如 我有 df x 1 2 3 4 5 6 7 8 9 10 y 2 1 3 1 8 9 6 7 4 6 如何将 x 在 1 到 5 和 6 到 10 的范围内分组 并计算这两个 bin 的平均值
  • JFreeChart:使用 java.time.LocalDate 或 java.time.LocalDateTime 创建图表

    java util Date非常容易出错 它死了 长命java time Given a Map