JAVA用jfreeChart生成正态分布图(频率直方图+曲线)

文章详细描述了如何使用JFreeChart库在Java中同时绘制频率直方图和曲线,包括数据处理、系列设置和图表保存的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前没用过jfreechart实际场景需要记录一下关于用jfreechart同时绘制频率直方图+曲线代码如下
public String productNormalDistributionCurve(ReportBasicEntity reportBasicEntity) {

	try {
		List<XyEntity> psyDistribution = reportBasicEntity.getPsyDistribution();//数据
		if (psyDistribution==null||psyDistribution.isEmpty()) {
			return null;
		}
		XYSeries barseries = new XYSeries("心态分布图");//柱状图
		XYSeriesCollection xyseriescollection = new
				XYSeriesCollection();//柱状图  关于series的collection
		//collection,barWidth
		XYSeriesCollection dataset = new XYSeriesCollection();//折线图collection
		XYSeries lineseries = new XYSeries("标准线");//折线图series
		/*XYSeries series2 = new XYSeries("心态分布图");*/
		for (int i = 0; i < psyDistribution.size(); i++) {
			lineseries.add(psyDistribution.get(i).getX(), psyDistribution.get(i).getY());//取出折线图所需数据
			barseries.add(psyDistribution.get(i).getX(), psyDistribution.get(i).getY1());//取出柱状图数据
			/*series2.add(psyDistribution.get(i).getX(), psyDistribution.get(i).getY1());*/
		}
		dataset.addSeries(lineseries);//添加到dataset
		xyseriescollection.addSeries(barseries);
		XYBarDataset xyBarDataset = new XYBarDataset(xyseriescollection,
				psyDistribution.get(1).getX()-psyDistribution.get(0).getX());
		/*dataset.addSeries(series2);*/
		JFreeChart chart = ChartFactory.createXYLineChart(
				"",
				"x", "y",
				dataset
		);//利用chartFactory创建JFreeChart对象
		XYPlot plot = (XYPlot) chart.getPlot();//此方法返回节点图表作为XYPlot。使用XYPolt我们可以XY图表做了一些实用操作
        plot.setDataset(1,xyBarDataset);//将柱状图数据塞入
		XYBarRenderer xyBarRenderer = new XYBarRenderer();
		xyBarRenderer.setSeriesVisibleInLegend(0,false);//设置不显示series的提示信息
		xyBarRenderer.setSeriesPaint(0,new Color(10,173,84));//series的图形颜色
		plot.setRenderer(1,xyBarRenderer);//设置图形绘制单元
		plot.getRenderer().setSeriesVisibleInLegend(0, false);//设置不显示series的提示信息
		Font font = new Font("黑体", Font.BOLD, 20);//字体
		chart.getLegend().setItemFont(font);
		plot.setBackgroundPaint(null);//背景
		File file = null;
		plot.setOutlineVisible(false);//边框
		try {
			file = new File(IdUtil.simpleUUID()+".jpg");
			ChartUtilities.saveChartAsJPEG(file, chart, 634, 323);
			System.out.println("Normal distribution curve saved successfully.");
			return Base64.encode(file);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			FileUtil.del(file);
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	return null;
}

生成效果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值