2016-08-03 17 views
1
public class createLineChartForSandSoil { 

    static JFreeChart chart; 
    public static XYSeries series; 

    public static void createLineChartForSandSoil(Document document) throws DocumentException, BadElementException, IOException { 
     Paragraph wordDegreeOfHeterogeneity = new Paragraph("Визначаємо ступінь неоднорідності піску:", smallFont); 
     document.add(wordDegreeOfHeterogeneity); 

     ChartPanel chartPanel = createChartPanel(); 
     int width = 450; 
     int height = 350; 
     XYPlot plot = chart.getXYPlot(); 
     XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); 
     renderer.setSeriesPaint(0, Color.BLACK); 
     plot.setRenderer(renderer); 
     plot.setOutlinePaint(Color.WHITE); 
     plot.setBackgroundPaint(Color.WHITE); 
     plot.setRangeGridlinesVisible(true); 
     plot.setRangeGridlinePaint(Color.GRAY); 
     plot.setDomainGridlinesVisible(true); 
     plot.setDomainGridlinePaint(Color.GRAY); 

     File lineChart = new File("D:/LineChart.png"); 
     ChartUtilities.saveChartAsPNG(lineChart, chart, width, height); 
     Image img = Image.getInstance("D:/LineChart.png"); 
     img.scalePercent(60f); 
     document.add(img); 
    } 

    private static XYDataset createDataset() { 
     XYSeriesCollection dataset = new XYSeriesCollection(); 
     series = new XYSeries(""); 

     series.add(2.0, sumOfParticlesLess_ValueMoreThan2); 
     series.add(1.0, sumOfParticlesLess_Value1_2); 
     series.add(0.5, sumOfParticlesLess_Value05_1); 
     series.add(0.25, sumOfParticlesLess_Value025_05); 
     series.add(0.1, sumOfParticlesLess_Value01_025); 
     series.add(0.0, 0.0); 

     dataset.addSeries(series); 

     return dataset; 
    } 

    private static ChartPanel createChartPanel() { 
     String chartTitle = ""; 
     String xAxisLabel = "Діаметр частинок d, мм"; 
     String yAxisLabel = "Сума частинок, %"; 

     XYDataset dataset = createDataset(); 

     chart = ChartFactory.createXYLineChart(chartTitle, xAxisLabel, yAxisLabel, dataset, PlotOrientation.VERTICAL, false, false, false); 

     return new ChartPanel(chart); 
    } 
} 

This code creates a line chart like on imageWie kann ich Werte aus dem Liniendiagramm in Java abrufen?

Wie kann ich den Wert auf der X-Achse (hotrizontal) in dem Punkt Y = 60 erhalten? Methoden .getAnnotationX() und .getAnnotationY() funktioniert nicht, weiß nicht warum (cannot find method). Kann mir jemand helfen?

Antwort

1

Wenn 60 waren die Ordinate eines Punktes in Ihrem XYSeries, könnten Sie einfach die List<XYDataItem> zurück von getItems() suchen und die entsprechenden Abszisse finden. Da dies nicht der Fall ist, müssen Sie nach den Belichtungsreihen suchen: (0.25, 50) und (0.5, 80). Dann können Sie die Methode Regression.getOLSRegression() verwenden, um die Steigung und den Schnittpunkt der Geraden zu finden, die die beiden Punkte verbindet. Mit diesen Werten können Sie die entsprechende Abszisse auflösen. Alternativ können Sie die two-point form einer linearen Gleichung neu anordnen, um den gewünschten Punkt zu finden. Ein vollständiges Beispiel, das Regression.getOLSRegression() verwendet, wird here gezeigt.

image