通过单击图表,JFreeChart XY系列坐标

时间:2020-04-27 17:19:28

标签: java servlets model-view-controller controller jfreechart

当用户单击JFreeChart提供的XY系列图表的点之一时,我试图分别获取x和y坐标。我也在使用Java编程语言的servlet中进行操作。 Home是我从模型包中创建的对象,该模型包具有名为Away /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Object saved in application scopes two list one fore Home and Away List<Home> forumi = (List<Home>) getServletContext().getAttribute( "home" ); List<Away> forumi2 = (List<Away>) getServletContext().getAttribute( "away" ); OutputStream out = response.getOutputStream(); try { //creating an XY dataset XYSeriesCollection dataset = new XYSeriesCollection(); XYSeries series1 = new XYSeries("Home"); XYSeries series2 = new XYSeries("Away"); //inputing data to chart int counter = 1; for(int i=0; i < forumi.size(); i++) { series1.add(counter, forumi.get(i).getScores()); ++counter; } int counter2 = 1; for(int i=0; i < forumi2.size(); i++) { series2.add(counter2, forumi2.get(i).getScores()); ++counter2; } dataset.addSeries(series1); dataset.addSeries(series2); /* create chart */ String chartTitle = "2019-2020"; String xAxisLabel = "game"; String yAxisLabel = "Scores"; JFreeChart chart = ChartFactory.createXYLineChart(chartTitle, xAxisLabel, yAxisLabel, dataset); //Customize chart XYPlot plot = chart.getXYPlot(); XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); // sets thickness for series (using strokes) renderer.setSeriesPaint(0, Color.RED); renderer.setSeriesPaint(1, Color.BLUE); // sets paint color for each series renderer.setSeriesStroke(0, new BasicStroke(2.0f)); renderer.setSeriesStroke(1, new BasicStroke(2.0f)); //renderer.setSeriesStroke(1, new BasicStroke(3.0f)); plot.setRenderer((XYItemRenderer) renderer); chartPanel = new ChartPanel(chart); //System.out.print(plot.getRangeCrosshairValue()); chart.getPlot().setBackgroundPaint(Color.WHITE); /* Set the HTTP Response Type */ response.setContentType("image/png"); /* Writes a chart to an output stream in PNG format */ ChartUtilities.writeChartAsPNG(out, chart, 1704, 300); } catch (Exception e) { System.err.println(e.toString()); /* Throw exceptions to log files */ } finally { out.close();/* Close the output stream */ } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } ``` 的类。请随时询问有关servlet的更多信息,因为我提供了以下代码。

from operator import add

input_list = [['A', 50, 10, 10, 10], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30], ['A', 20, 20, 20, 20]]

out = {}
for l in input_list:
    n = len(l)
    key = l[0]
    vals = [key] + list( map(add, l[1:n], out.get(key, [0]*n)[1:n]) )
    out[key] = vals

1 个答案:

答案 0 :(得分:1)

如本example所示,您可以创建一个与图表中的实体相对应的HTML image map,以便在servlet上下文中使用。

在您选择的tooltips中将true设置为ChartFactory会添加一个StandardXYToolTipGenerator,它将显示有关鼠标移动事件的工具提示;将鼠标悬停在scatter.html中的实体上以查看效果;您可以自定义生成器,如herehere所示。

在您选择的urls中将true设置为ChartFactory会添加一个StandardXYURLGenerator,它将在鼠标单击事件时打开生成的URL。单击scatter.html中带有自定义生成器的实体以查看效果:

chart.getXYPlot().getRenderer().setURLGenerator(new StandardXYURLGenerator(){
    @Override
    public String generateURL(XYDataset dataset, int series, int item) {
        return "http://example.com";
    }
});

您的实际生成器可以为datasetseriesitem的特定值返回任何所需的URL。