scatter plot in jfreechart from database

前端 未结 1 436
余生分开走
余生分开走 2020-12-04 03:14

How can i draw scatter plot of datas in mysql database table using jfreechart in java. I have used swing library. Any link would be helpful. I searched google but couldnot f

相关标签:
1条回答
  • 2020-12-04 03:48

    This complete example creates a suitable database table in memory, queries it into a JDBCXYDataset and displays the dataset in a scatter plot. Note how the first column becomes the domain, while successive columns become individual series.

    image

    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();
                }
            });
        }
    }
    
    0 讨论(0)
提交回复
热议问题