java - 如何在Java freechart中添加多行?

标签 java jfreechart

我做了一个 Java 应用程序,需要向其中添加图形。 我可以做到这一点,但我只能向每个图表添加一个产品(线)。

我希望我可以添加更多内容。

这是我的代码

String query="select date,price from produtcs where idProduct like 'Prod1'";
            JDBCCategoryDataset dataset = new JDBCCategoryDataset (CriaConexao.getConexao(),query);
            JFreeChart chart = ChartFactory.createLineChart(Record of Price", "Date", "Price", dataset, PlotOrientation.VERTICAL, false, true, true);
            BarRenderer renderer = null;
            CategoryPlot plot= null;
            renderer=new BarRenderer();
            ChartFrame frame = new ChartFrame("Record of Price", chart);
            frame.setVisible(true);
            frame.setSize(400,650);

图表----

enter image description here

图表中显示的记录------

idProduct             Date  Price
Pro01           2014-05-29  19.1
Pro01           2014-05-29  18.8
Pro01           2014-05-29  18.7
Pro01           2014-05-29  18.9
Pro01           2014-05-29  18.7
Pro01           2014-05-29  18.5

我想要在图表中显示的记录---------

idProduct             Date  Price
Pro01           2014-05-29  19.1
Pro01           2014-05-29  18.8
Pro02           2014-05-29  18.7
Pro02           2014-05-29  18.9
Pro03           2014-05-29  18.7
Pro03           2014-05-29  18.5

我尝试这个查询,但只显示一行

String query="select date,price from produtcs where idProduct like 'Prod%'";
<小时/>

编辑

我编辑一个新查询:

SELECT p1.`Date`
     , p1.`Price` as `Price of Prod01`
     , p2.`Price` as `Price of Prod02`
     , concat(p1.idProduct, ' / ', p2.idProduct) idProduct
FROM   (SELECT idProduct, Date, Price
        FROM products
        WHERE idProduct LIKE 'Pro01') p1
       LEFT  JOIN (SELECT idProduct, Date, Price
                   FROM products
                   WHERE idProduct LIKE 'Pro02') p2
       ON p1.Date = p2.Date

结果是:

 Date       Price of Prod01     Price of Prod02      Products
2014-05-29    23.8                  23.0                 BrgTH001 / BrgTH002
2014-05-29    23.8                  23.1               BrgTH001 / BrgTH002
2014-05-29    23.8                  22.6               BrgTH001 / BrgTH002
2014-05-29    23.8                  22.5               BrgTH001 / BrgTH002
2014-05-29    23.8                  22.8               BrgTH001 / BrgTH002
2014-05-29    23.8                  23.1               BrgTH001 / BrgTH002

但结果又是一行:S

最佳答案

来自 JDBCCategoryDataset 上的 Javadoc:

The first column will be the category name and remaining columns values (each column represents a series).

因此,如果您将第二种产品的价格放在第三列中,应该可以正常工作。

但是,如果由于架构或数据限制等原因而无法做到这一点,您还有其他几个选项可供选择:

  1. 使用 DefaultCategoryDataset 作为与 JDBCCategoryDataset 最接近的数据并手动填充它。
  2. 您似乎正在创建一个时间序列图(根据日期绘制值)。因此,尝试使用 TimeSeriesCollection 作为数据集是合理的。它是时间序列的集合(惊喜!),每个时间序列都是(日期、值)点的集合,这些点将在图表上绘制为一条线。
  3. 更通用的方法是使用抽象数据集并提供渲染器,但这需要相当多的背景知识,并且是在您需要非常重要的东西时保留的。 (但是对于学习JFreeChart很有用)

我会使用选项 2。它的片段可能如下所示:

TimeSeriesCollection timeSeries = new TimeSeriesCollection();
TimeSeries product1 = new TimeSeries("product1");
new JDBCTemplate("query", params, new ResultSetExtractor<Void>() {  
    public Void extractData(ResultSet rs) throws SQLException {
        product1.addOrUpdate(new FixedMillisecond(rs.getLong(1)), rs.getDouble(2));
        return null;
    }
}
<other products to follow>

关于java - 如何在Java freechart中添加多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23930650/

相关文章:

Java 代码约定 : must match pattern '^[a-z][a-zA-Z0-9]*$'

java - 如何修复身份始终返回 0 的 HSQL DataSource + TxM

java - 将 JSONObject 转换为 JSONArray

java - 叠加XYPlotDemo1 : Changing Series Color

java - 带有 JFreeChart 的 Eclipse RCP

jfreechart - 您可以在同一个 XY 图上设置多个绘画吗?

java - 当时钟改变时处理保存的纪元时间

java - Android 项目中的文件应存储在何处以供 BufferedReader 访问?

java - 如何在 JFreeChart 散点图中找到距离鼠标最近的点?

java - 如何扩展 OHLCItem 类并在 OHLCSeries 中使用它