来自数据库的 jfreechart 散点图

2024-05-20

如何使用java中的jfreechart绘制mysql数据库表中数据的散点图。我使用过 Swing 库。 任何链接都会有帮助。我搜索了谷歌但找不到理解的解决方案。 如果您有代码,请提供给我。 实际上我确实做了条形图并使用 jfreechart 绘制了它。 我用于条形图的代码在这里。这里的display3函数显示条形图。 如何修改它以显示散点图?

public void display3() throws SQLException, ClassNotFoundException{

    DefaultCategoryDataset dataset = new DefaultCategoryDataset();

    String JDBC_DRIVER="com.mysql.jdbc.Driver";
    String DB_URL="jdbc:mysql://localhost/data2";
    Connection conn;
    Statement stmt;
    String USER = "root";
    String PASS = "";
    try{
        Class.forName(JDBC_DRIVER);
        conn=DriverManager.getConnection(DB_URL,USER,PASS);
        System.out.println("Creating statement...");
        stmt = conn.createStatement();

        String sql;
        sql="SELECT * FROM `production` WHERE crop_id = 1 AND location_id = 1";
        ResultSet rs=stmt.executeQuery(sql);

        while (rs.next()){
            //String student = rs.getString("studentname");
            String yeartext = rs.getString("year_of_production");
            //double value = Double.parseDouble(text);
            String productiontext = rs.getString("production_amount");
            double production = Double.parseDouble(productiontext);
            Integer year = Integer.parseInt(yeartext);

            dataset.setValue(production, "production", year);


        }



        JFreeChart chart = ChartFactory.createBarChart("Bar Graph",// Chart Title
                "Year", //horizontal axis label
                "Paddy Production", // vertical axis label
                dataset, //data
                PlotOrientation.VERTICAL, //orientation of chart
                true, //include legend
                false, // tool tips
                true);//urls
        CategoryPlot p = chart.getCategoryPlot();
        ChartPanel chartPanel = new ChartPanel(chart, false);
        jPanel9.setLayout(new BorderLayout());
        jPanel9.add(chartPanel, BorderLayout.EAST);
        jPanel9.add(chartPanel);
        SwingUtilities.updateComponentTreeUI(this);
        p.setRangeGridlinePaint(blue);

        System.out.println("Database created successfully...");

    } catch(SQLException se) {
        //Handle errors for JDBC
        System.out.println("Connect failed ! ");
        se.printStackTrace();
    }

}       

  I finally solved my problem: 

精炼代码如下并且有效:

public void display3() throws SQLException, ClassNotFoundException{

        //DefaultCategoryDataset dataset = new DefaultCategoryDataset();
         XYSeriesCollection dataset = new XYSeriesCollection();
         XYSeries series = new XYSeries("production");
        String JDBC_DRIVER="com.mysql.jdbc.Driver";
    String DB_URL="jdbc:mysql://localhost/data2";
    Connection conn;
    Statement stmt;
    String USER = "root";
    String PASS = "";
        try{
            Class.forName(JDBC_DRIVER);
            conn=DriverManager.getConnection(DB_URL,USER,PASS);
            System.out.println("Creating statement...");
            stmt = conn.createStatement();
                        String sql;
                        sql="SELECT * FROM `production` WHERE crop_id = 1 AND location_id = 1";
                        ResultSet rs=stmt.executeQuery(sql);

                        while (rs.next()){
                            //String student = rs.getString("studentname");
                            String yeartext = rs.getString("year_of_production");
                            //double value = Double.parseDouble(text);
                            String productiontext = rs.getString("production_amount");
                            double production = Double.parseDouble(productiontext);
                            double year = Double.parseDouble(yeartext);
                            series.add(year,production) ;
                            //dataset.addSeries(series);




                        }
                        dataset.addSeries(series);

                        JFreeChart chart = ChartFactory.createScatterPlot("Scatter Plot","Year","Paddy Production", dataset);

                        //CategoryPlot p = chart.getCategoryPlot();
                         //XYPlot xyplot = (XYPlot)jfreechart.getPlot();
                        //http://stackoverflow.com/questions/12417732/jfreechart-with-scroller
                        ChartPanel chartPanel = new ChartPanel(chart, false);
                        jPanel9.setLayout(new BorderLayout());
                        jPanel9.add(chartPanel, BorderLayout.EAST);
                        jPanel9.add(chartPanel);
                        SwingUtilities.updateComponentTreeUI(this);
                       // p.setRangeGridlinePaint(blue);

                        System.out.println("Database created successfully...");

                }catch(SQLException se){
                    //Handle errors for JDBC
                    System.out.println("Connect failed ! ");
                    se.printStackTrace();
//                    JOptionPane.showMessageDialog(MajorUI.this, err.getMessage());
                    }

    }

输出是:http://i58.tinypic.com/29ynsxh.png http://i58.tinypic.com/29ynsxh.png


这个完整的示例在内存中创建一个合适的数据库表,将其查询到JDBCXYDataset http://www.jfree.org/jfreechart/api/javadoc/org/jfree/data/jdbc/JDBCXYDataset.html并以散点图显示数据集。请注意第一列如何成为域,而连续的列如何成为单独的系列。

import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.Random;
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.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.jdbc.JDBCXYDataset;

/**
 * @see http://stackoverflow.com/a/24592754/230513
 */
public class JDBCTest {

    private static final int N = 30;
    private static final Random r = new Random();

    private void display() {
        JFrame f = new JFrame("JDBCTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JDBCXYDataset jds = createDataset();
        JFreeChart chart = ChartFactory.createScatterPlot("Inventory",
            "Date", "Count", jds, PlotOrientation.VERTICAL, true, true, false);
        XYPlot plot = chart.getXYPlot();
        plot.setDomainAxis(new DateAxis("Date"));
        f.add(new ChartPanel(chart));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        for (int i = 0; i < jds.getItemCount(); i++) {
            System.out.println(new Date(jds.getX(0, i).longValue()));
        }
    }

    private JDBCXYDataset createDataset() {
        try {
            Connection conn = DriverManager.getConnection(
                "jdbc:h2:mem:test", "", "");
            Statement st = conn.createStatement();
            st.execute("create table inventory(when date, n1 integer, n2 integer)");
            PreparedStatement ps = conn.prepareStatement(
                "insert into inventory values (?, ?, ?)");
            Calendar c = Calendar.getInstance();
            for (int i = 0; i < N; i++) {
                ps.setDate(1, new Date(c.getTimeInMillis()));
                ps.setInt(2, N / 3 + r.nextInt(N / 3));
                ps.setInt(3, N / 2 + r.nextInt(N / 3));
                ps.execute();
                c.add(Calendar.MONTH, 1);
            }
            JDBCXYDataset jds = new JDBCXYDataset(conn);
            jds.executeQuery("select when, n1, n2 from inventory");
            return jds;
        } catch (SQLException ex) {
            ex.printStackTrace(System.err);
        }
        return null;
    }

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

来自数据库的 jfreechart 散点图 的相关文章

随机推荐

  • 为什么卡夫卡这么快[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如果我有相同的硬件 请使用 Kafka 或我们当前的解决方案 ServiceMix Camel 有什么区别吗 Kafka 能处理比它
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 为什么我的 tableView 函数运行了 3 次?

    我有一个 UITableView 并且有执行它所需的方法之一 func tableView tableView UITableView numberOfRowsInSection section Int gt Int println sec
  • 围绕 readline 构建的 python 批处理的触发器选项卡完成

    背景 我有一个 python 程序 它导入并使用 readline 模块来构建自制的命令行界面 我有第二个 python 程序 围绕 Bottle 一个 Web 微框架构建 充当该 CLI 的前端 第二个 python 程序向第一个程序打开
  • 为什么 Opencv Findcontour 在 Emgu c# 中表现不同?

    你好 opencv c 方法Findcontours返回数组层次结构并获取孔的边界 我可以获取层次结构 我怎样才能在 emgu 简历中得到这些边界请帮忙 我怎样才能找到 emgu 简历中的漏洞 您可以使用以下代码获取 Emgucv 中的轮廓
  • 使用远程管理凭据将文件复制到远程计算机

    我正在使用 C 我需要能够将一组文件复制到大约 500 台不同的计算机上 我已成功地使用 LogonUser 方法来模拟具有复制文件所需权限的域帐户 文件的目标路径类似于 远程计算机 C SomeFolder 我的问题是 有没有办法做到这一
  • 从作用域 '' 引用了类型 '' 的变量 '',但未定义

    好吧 下面的代码是不言自明的 我想使用将两个表达式合并为一个And操作员 最后一行导致 rune time 错误 附加信息 从范围 引用了 System String 类型的变量 y 但未定义 Code Expression
  • Airflow 1.10.3 - 空白“最近任务”和“DAG 运行”

    我在 Ubuntu 18 10 上安装了 Airflow 1 10 3 并且能够添加 DAG 并运行它们 但 Web UI 中的 最近任务 和 DAG 运行 为空 我所看到的只是一个黑色虚线圆圈 它不断加载 但什么也没有实现 我最近将 Ai
  • 从数据框中按索引删除行

    我有一个数组wrong indexes train其中包含我想从数据框中删除的索引列表 0 63 151 469 1008 要删除这些索引 我正在尝试这样做 df train drop wrong indexes train 但是 代码失败
  • 如何重新加载 jquery dropkick 对象

    我使用一个简单的选择列表和 jquery dropkick 库来使其美观 现在我想在更改相应的选择元素后更改 dropkick 内容 出现了一个新选项 但只需调用 select dropkick 不起作用 而且好像不支持 只需从头开始重建那
  • scrapy LinkExtractors 最终会得到唯一的链接吗?

    所以 我有一个包含很多文章和页码的页面 现在 如果我想提取一篇文章 我会使用 Rule LinkExtractor allow article html callback parse article 对于页面我使用这个规则 规则 LinkE
  • 在 Swift 中自动移动 UISlider

    我想在按下按钮时将 UISlider 从 minValue 循环移动到 maxValue 并在再次按下按钮时将其停止在当前位置 我想使用 Swift 我遇到的主要问题是函数 slider setValue 太快了 我希望动画更慢 IBAct
  • 通过 URL 指定控制器类与为每个控制器编写一个脚本相比,有何优缺点?

    今年夏天我安装了两个不同的 PHP 系统 每个都使用两种不同的方法 方法 1 每个任务一个 PHP 文件 该方法需要一个PHP为每个主要任务创建文件 例如 我的上传脚本可以通过http www domain com upload php O
  • Typescript Map 在使用其函数时抛出错误(mapobject.keys() 不是函数)

    我是 typescript 中的新蜜蜂 在我的 angular4 项目中 我收到一个 json 形式的地图对象 所以我声明了一个如下所示的类
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • TypeScript 编译速度极慢 > 12 秒

    只是把它放在那里看看其他人是否也遇到这个问题 我已经使用 webpack 作为我的构建工具 使用 typescript 构建了一个 Angular 2 应用程序 一切都运行良好 但是我注意到 typescript 编译超级超级慢 我现在只有
  • Angular 2 链式 Promise 并传递拒绝

    应该是一个简单的问题 但是我找不到有关如何做到这一点的文档 像这样链接一个承诺 Making a promise no problem let promise new Promise resolve reject gt let data d
  • 如何访问Loader的sourceComponent中的QML对象?

    我可能需要读取或写入的一些属性Loader s sourceComponent来自一些外部函数 访问该房产的方式是什么x里面的对象的Loader s sourceComponent import QtQuick 2 0 Item width
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘