gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:21 24 4
gpt4 key购买 nike

我做了一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com