我正在使用OpenCV在eclipse上执行对象跟踪。我正在用一台摄像机录制一架遥控飞机飞过我的起居室。该计划运作良好,并用直角约束直升机。我现在想要输出一个显示直升机飞行的图表。我基本上将所有矩形的中心保存在两个单独的列表中,这些列表初始化如下:
xPositions = new ArrayList<Integer>();
yPositions = new ArrayList<Integer>();
我输出了列表的内容,以测试数据是否确实被保存,并且它有效。我现在有效地迷失了如何获取这些列表并将它们转换为我想要的图表。我下载了JFreeChart
,但我完全不熟悉它。我曾尝试阅读一些教程,但它们并没有那么有用。我现在该怎么办?
编辑:
非常感谢评论家伙,特别是corsiKa。我最终使用了该教程并对其进行了扩展。现在我有另一个非常小的问题。我希望显示的图形具有设置轴长度。也就是说,我希望x轴从0到700,y轴从0到500.但是,我的绘图轴取决于我拥有的数据。如果我的x坐标范围在0到300之间,那么x轴只会从0到300.有人知道如何解决这个问题吗?所以这是我的扩展课程。 公共类MakesLineChart扩展了ApplicationFrame {
public MakesLineChart(final String title, List<Integer> xCoordinatesConstructor, List<Integer> yCoordinatesConstructor ) {
super(title);
final XYDataset dataset = createDataset(xCoordinatesConstructor, yCoordinatesConstructor);
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private XYDataset createDataset(List<Integer> xCoordinates, List<Integer> yCoordinates) {
final XYSeries series1 = new XYSeries("Position");
if(xCoordinates.size()==yCoordinates.size()){
for(int i=0;i<xCoordinates.size();i++ ){
series1.add(xCoordinates.get(i), yCoordinates.get(i));
}
}
final XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
return dataset;
}
private JFreeChart createChart(final XYDataset dataset) {
// create the chart...
final JFreeChart chart = ChartFactory.createXYLineChart(
"Position Plot", // chart title
"X", // x axis label
"Y", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);
// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
chart.setBackgroundPaint(Color.white);
// get a reference to the plot for further customisation...
final XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
// plot.setAxisOffset(new Spacer(Spacer.ABSOLUTE, 5.0, 5.0, 5.0, 5.0));
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesLinesVisible(0, false);
renderer.setSeriesShapesVisible(1, false);
plot.setRenderer(renderer);
// change the auto tick unit selection to integer units only...
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// OPTIONAL CUSTOMISATION COMPLETED.
return chart;
}
}