java将数据平均值生成带标记的折线图
时间: 2024-02-13 11:05:41 浏览: 114
要生成带标记的折线图,可以使用Java中的JFreeChart库。下面是一个简单的示例代码,展示如何将数据的平均值生成带标记的折线图:
```java
import java.awt.Color;
import java.awt.BasicStroke;
import java.util.ArrayList;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
public class AverageLineChart {
public static JFreeChart createChart(ArrayList<Double> data, String title, String xLabel, String yLabel) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// 计算平均值
double sum = 0.0;
for (Double d : data) {
sum += d;
}
double average = sum / data.size();
// 添加数据到数据集
for (int i = 0; i < data.size(); i++) {
dataset.addValue(data.get(i), "Data", Integer.toString(i+1));
}
// 创建折线图
JFreeChart chart = ChartFactory.createLineChart(
title, // 图表标题
xLabel, // X轴标题
yLabel, // Y轴标题
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向
true, // 是否显示图例
true, // 是否显示工具提示
false // 是否生成URL链接
);
// 设置图表背景色
chart.setBackgroundPaint(Color.WHITE);
// 获取图表的绘图区域
CategoryPlot plot = (CategoryPlot) chart.getPlot();
// 设置X轴
CategoryAxis categoryAxis = plot.getDomainAxis();
categoryAxis.setLabelFont(new Font("SansSerif", Font.BOLD, 14));
categoryAxis.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));
// 设置Y轴
NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
numberAxis.setLabelFont(new Font("SansSerif", Font.BOLD, 14));
numberAxis.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));
// 设置折线样式
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
renderer.setBaseStroke(new BasicStroke(2.0f));
renderer.setSeriesShapesVisible(0, true);
renderer.setSeriesLinesVisible(0, true);
renderer.setSeriesShape(0, new Ellipse2D.Double(-3.0, -3.0, 6.0, 6.0));
renderer.setSeriesPaint(0, Color.BLUE);
// 添加平均值的标记线
CategoryMarker averageMarker = new CategoryMarker(Integer.toString(data.size()));
averageMarker.setPaint(Color.RED);
averageMarker.setStroke(new BasicStroke(2.0f));
plot.addDomainMarker(averageMarker);
return chart;
}
}
```
上述代码中,我们首先计算了数据的平均值,然后将数据添加到一个默认的分类数据集中。接着,我们使用JFreeChart库创建了一个折线图,并设置了图表的标题、X轴标题、Y轴标题、图表方向、是否显示图例、是否显示工具提示等属性。然后,我们设置了图表的背景色、X轴、Y轴、折线样式,并添加了平均值的标记线。
如果要使用上述代码生成带标记的折线图,可以按照以下步骤进行:
1. 创建一个ArrayList<Double>类型的数据列表,存储要绘制的数据。
2. 调用`createChart`方法,传入数据列表、图表标题、X轴标题、Y轴标题等参数,生成折线图。
例如,以下是一个使用示例:
```java
import java.util.ArrayList;
import javax.swing.JFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
public class Main {
public static void main(String[] args) {
// 创建数据列表
ArrayList<Double> data = new ArrayList<Double>();
data.add(10.0);
data.add(20.0);
data.add(30.0);
data.add(40.0);
data.add(50.0);
// 创建折线图
JFreeChart chart = AverageLineChart.createChart(data, "Average Line Chart", "X", "Y");
// 创建图表面板
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
// 创建窗口并显示图表
JFrame frame = new JFrame("Average Line Chart");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
```
运行上述代码,就可以在窗口中看到一个带标记的折线图,其中蓝色的圆点表示数据点,红色的线表示平均值。
希望这个例子能对你有所帮助!
阅读全文