JFreeChart 生成双Y轴折线图

该代码展示了如何在Java中利用JFreeChart库创建一个双Y轴线图,数据集包含不同材质(如PE,STEEL,CUTTER,NYLON,COPPER)的数量和长度和,图表标题为低压燃气管道,并处理了中文乱码问题。
摘要由CSDN通过智能技术生成

不解释,直接上代码

public class demo_zhe {
    public static void main(String[] args) {
        // 创建数据集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(10, "数量", "PE");
        dataset.addValue(200, "长度和", "PE");
        dataset.addValue(30, "数量", "STEEL");
        dataset.addValue(400, "长度和", "STEEL");
        dataset.addValue(50, "数量", "CUTTER");
        dataset.addValue(350, "长度和", "CUTTER");
        dataset.addValue(70, "数量", "NYLON");
        dataset.addValue(800, "长度和", "NYLON");
        dataset.addValue(55, "数量", "COPPER");
        dataset.addValue(1000, "长度和", "COPPER");

        // 创建图表
        JFreeChart chart = ChartFactory.createLineChart(
                "低压燃气管道", // 图表标题
                "材质", // 横轴标签
                "", // 纵轴标签,在后面创建纵轴标签
                dataset // 数据集

        );

        // 设置背景颜色
        chart.setBackgroundPaint(Color.white);

        // 获取绘图区域对象
        CategoryPlot plot = (CategoryPlot) chart.getPlot();


        // 设置Y1轴
        NumberAxis axis1 = (NumberAxis) plot.getRangeAxis();
        axis1.setAutoRangeIncludesZero(false);
        axis1.setLabel("数量");

        // 创建第二个Y轴,使用和第一个Y轴相同的X轴
        NumberAxis axis2 = new NumberAxis("长度和");
        axis2.setAutoRangeIncludesZero(false);

        // 将第二个Y轴添加到图表中
        plot.setRangeAxis(1, axis2);
        plot.setDataset(1, dataset);
        plot.mapDatasetToRangeAxis(1, 1);

        // 设置第二个系列的绘制器和颜色
        CategoryItemRenderer renderer2 = plot.getRenderer();
        renderer2.setSeriesPaint(1, java.awt.Color.BLUE);

        //在折点新鲜事数值
        renderer2.setDefaultItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        renderer2.setDefaultItemLabelsVisible(true);
        renderer2.setDefaultPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
        renderer2.setDefaultItemLabelFont(new Font("宋体", Font.PLAIN, 20));

        /** ---------------------- 中文乱码问题处理 Start ------------------------------- */
        CategoryAxis domainAxis = plot.getDomainAxis();     //水平底部列表
        domainAxis.setLabelFont(new Font("宋体", Font.BOLD, 14));     //水平底部标题
        domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12)); //垂直标题

        ValueAxis rangeAxis = plot.getRangeAxis();//获取柱状
        rangeAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
        chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 20));//设置标题字体
        /** ---------------------- 中文乱码问题处理 End ------------------------------- */

        // 创建图表窗口并显示图表
        ChartPanel chartPanel = new ChartPanel(chart);
        //测试用,导入程序,可将此段删除
        JFrame frame = new JFrame("Dual Axis Bar Chart");
        frame.setContentPane(chartPanel);
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Java中导出带有Y轴的多条折线图到Excel,你可以继续使用Apache POI库和JFreeChart库,并进行一些适当的修改。以下是一个示例代码: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.jfree.chart.*; import org.jfree.chart.axis.*; import org.jfree.chart.plot.*; import org.jfree.data.xy.*; import java.io.*; public class ExcelLineChartExporter { public static void main(String[] args) throws IOException { // 创建Excel工作簿和工作表 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("折线图"); // 创建折线图数据集 XYDataset dataset = createDataset(); // 创建折线图 JFreeChart chart = createLineChart(dataset); // 将折线图绘制到Excel工作表中 ByteArrayOutputStream chartImage = new ByteArrayOutputStream(); ChartUtils.writeChartAsPNG(chartImage, chart, 400, 300); int pictureIdx = workbook.addPicture(chartImage.toByteArray(), Workbook.PICTURE_TYPE_PNG); chartImage.close(); CreationHelper helper = workbook.getCreationHelper(); Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = helper.createClientAnchor(); anchor.setCol1(0); anchor.setRow1(0); Picture picture = drawing.createPicture(anchor, pictureIdx); picture.resize(); // 保存Excel文件 FileOutputStream fileOut = new FileOutputStream("折线图.xlsx"); workbook.write(fileOut); fileOut.close(); System.out.println("折线图导出成功!"); } private static XYDataset createDataset() { // 创建折线图数据集 XYSeriesCollection dataset = new XYSeriesCollection(); // 添加折线图数据 XYSeries series1 = new XYSeries("系列1"); series1.add(1, 5); series1.add(2, 3); series1.add(3, 6); dataset.addSeries(series1); XYSeries series2 = new XYSeries("系列2"); series2.add(1, 4); series2.add(2, 7); series2.add(3, 9); dataset.addSeries(series2); return dataset; } private static JFreeChart createLineChart(XYDataset dataset) { // 创建折线图 JFreeChart chart = ChartFactory.createXYLineChart( "多条折线图", // 标题 "X轴", // X轴标签 "Y轴", // Y轴标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向 true, // 是否包含图例 true, // 是否包含工具提示 false // 是否包含URL链接 ); // 获取绘图区域对象 XYPlot plot = chart.getXYPlot(); // 创建第二个Y轴 NumberAxis yAxis2 = new NumberAxis("Y轴2"); yAxis2.setAutoRangeIncludesZero(false); plot.setRangeAxis(1, yAxis2); // 将第二个数据集与第二个Y轴关联 plot.setDataset(1, createDataset()); plot.mapDatasetToRangeAxis(1, 1); // 创建第二个渲染器 XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer(); renderer2.setSeriesPaint(0, ChartColor.BLUE); plot.setRenderer(1, renderer2); return chart; } } ``` 在上述代码中,我们添加了一个名为`createLineChart`的新方法,用于创建带有Y轴折线图。我们使用了`XYPlot`和`NumberAxis`来创建第二个Y轴,并将第二个数据集与之关联。然后,我们创建了第二个渲染器`XYLineAndShapeRenderer`来设置第二个数据集的样式。 请注意,为了演示目的,我在`createLineChart`方法中直接调用了`createDataset`方法来创建第二个数据集。你可以根据实际需求修改代码以适应更复杂的数据集和样式。 同样,请确保已在项目中引入了Apache POI和JFreeChart的相关依赖。运行示例代码后,将会生成一个包含多条折线图的Excel文件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值