使用 JDBCCategoryDataset 的折线图中的多个系列问题
Multiple series Issue in line chart using JDBCCategoryDataset
我想在 Java 应用程序中使用 JFreeChart
添加多个系列来创建折线图。我从数据库中检索值并使用这些值生成图表。但当时图表上只出现一条线。任何人都可以帮助同时显示到线路吗?
try{
String query = "SELECT hardware, SUM(Quantity) FROM request_1v2 where date "
+ "between '"+txt1+"' and '"+txt2+"'group by hardware";
String querys = "SELECT hardware, SUM(Quantity) FROM request_1v2 where date "
+ "between '"+txt5+"' and '"+txt6+"'group by hardware";
JDBCCategoryDataset dataset1 = new JDBCCategoryDataset(dbConnection.dbConnector());
dataset1.executeQuery(query);
JDBCCategoryDataset dataset2 = new JDBCCategoryDataset(dbConnection.dbConnector());
dataset2.executeQuery(querys);
System.out.println(dataset1);
JFreeChart chart = ChartFactory.createLineChart("Hardware booked out between "+txt1+" and "+txt2+"", "Hardware", "Number", dataset1, PlotOrientation.VERTICAL, false, true, true);
ChartPanel chartPanel = new ChartPanel(chart);
panel.removeAll();
panel.add(chartPanel, BorderLayout.CENTER);
panel.validate();
JFreeChart chart1 = ChartFactory.createLineChart("Hardware booked out between "+txt5+" and "+txt6+"", "Hardware", "Number", dataset2, PlotOrientation.VERTICAL, false, true, true);
ChartPanel chartPanel1 = new ChartPanel(chart1);
panel_1.removeAll();
panel_1.add(chartPanel1, BorderLayout.CENTER);
panel_1.validate();
String sql = "select * from request_1v2 where Date between '"+txt1+"' and '"+txt2+"' order by date desc";
PreparedStatement pst = connection.prepareStatement(sql);
pst=connection.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
table.setModel(DbUtils.resultSetToTableModel(rs));
}catch (Exception e){
JOptionPane.showConfirmDialog(null, e);
}
JDBCCategoryDataset
specifies that "The first column will be the category name and remaining columns values (each column represents a series)." To get two series, you need to select three attributes. It should be possible to use aliases in a single query to distinguish references to the same table, as suggested here,可能是这样的:
SELECT hardware, SUM(t1.quantity) AS Series1, SUM(t2.quantity) AS Series2
FROM request_1v2 t1, request_1v2 t2
WHERE t1.date BETWEEN …
或者,您可以将两个数据集组合成新的 CategoryDataset
并使用它来创建单个图表。
DefaultCategoryDataset dcd = new DefaultCategoryDataset();
for (int i = 0; i < dataset1.getColumnCount(); i++) {
dcd.addValue(dataset1.getValue(dataset1.getRowKey(0), dataset1.getColumnKey(i)),
dataset1.getRowKey(0), dataset1.getColumnKey(i));
dcd.addValue(dataset2.getValue(dataset2.getRowKey(0), dataset2.getColumnKey(i)),
dataset2.getRowKey(0), dataset1.getColumnKey(i));
}
JFreeChart chart = ChartFactory.createLineChart(…, dcd, …);
我想在 Java 应用程序中使用 JFreeChart
添加多个系列来创建折线图。我从数据库中检索值并使用这些值生成图表。但当时图表上只出现一条线。任何人都可以帮助同时显示到线路吗?
try{
String query = "SELECT hardware, SUM(Quantity) FROM request_1v2 where date "
+ "between '"+txt1+"' and '"+txt2+"'group by hardware";
String querys = "SELECT hardware, SUM(Quantity) FROM request_1v2 where date "
+ "between '"+txt5+"' and '"+txt6+"'group by hardware";
JDBCCategoryDataset dataset1 = new JDBCCategoryDataset(dbConnection.dbConnector());
dataset1.executeQuery(query);
JDBCCategoryDataset dataset2 = new JDBCCategoryDataset(dbConnection.dbConnector());
dataset2.executeQuery(querys);
System.out.println(dataset1);
JFreeChart chart = ChartFactory.createLineChart("Hardware booked out between "+txt1+" and "+txt2+"", "Hardware", "Number", dataset1, PlotOrientation.VERTICAL, false, true, true);
ChartPanel chartPanel = new ChartPanel(chart);
panel.removeAll();
panel.add(chartPanel, BorderLayout.CENTER);
panel.validate();
JFreeChart chart1 = ChartFactory.createLineChart("Hardware booked out between "+txt5+" and "+txt6+"", "Hardware", "Number", dataset2, PlotOrientation.VERTICAL, false, true, true);
ChartPanel chartPanel1 = new ChartPanel(chart1);
panel_1.removeAll();
panel_1.add(chartPanel1, BorderLayout.CENTER);
panel_1.validate();
String sql = "select * from request_1v2 where Date between '"+txt1+"' and '"+txt2+"' order by date desc";
PreparedStatement pst = connection.prepareStatement(sql);
pst=connection.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
table.setModel(DbUtils.resultSetToTableModel(rs));
}catch (Exception e){
JOptionPane.showConfirmDialog(null, e);
}
JDBCCategoryDataset
specifies that "The first column will be the category name and remaining columns values (each column represents a series)." To get two series, you need to select three attributes. It should be possible to use aliases in a single query to distinguish references to the same table, as suggested here,可能是这样的:
SELECT hardware, SUM(t1.quantity) AS Series1, SUM(t2.quantity) AS Series2
FROM request_1v2 t1, request_1v2 t2
WHERE t1.date BETWEEN …
或者,您可以将两个数据集组合成新的 CategoryDataset
并使用它来创建单个图表。
DefaultCategoryDataset dcd = new DefaultCategoryDataset();
for (int i = 0; i < dataset1.getColumnCount(); i++) {
dcd.addValue(dataset1.getValue(dataset1.getRowKey(0), dataset1.getColumnKey(i)),
dataset1.getRowKey(0), dataset1.getColumnKey(i));
dcd.addValue(dataset2.getValue(dataset2.getRowKey(0), dataset2.getColumnKey(i)),
dataset2.getRowKey(0), dataset1.getColumnKey(i));
}
JFreeChart chart = ChartFactory.createLineChart(…, dcd, …);