java - jfreecharts中如何调整x、y轴线

标签 java charts jfreechart

在我的 jfree 折线图中,x 和 y 轴线是分开绘制的。我需要让两个轴在原点相交。 这是我从 jfree 折线图获得的实际图像 enter image description here

如何在jfree折线图中将两条轴线在原点连接...

我尝试过使用此代码示例

final DefaultCategoryDataset lineDataset = new DefaultCategoryDataset();
        lineDataset.addValue(10, "Dep", "2009");
        lineDataset.addValue(11, "Dep", "2010");
        lineDataset.addValue(10, "Dep", "2011");
        lineDataset.addValue(10, "Dep", "2012");

        lineDataset.addValue(7, "Dia", "2009");
        lineDataset.addValue(7, "Dia", "2010");
        lineDataset.addValue(7, "Dia", "2011");
        lineDataset.addValue(7, "Dia", "2012");

        lineDataset.addValue(3, "HD", "2009");
        lineDataset.addValue(3, "HD", "2010");
        lineDataset.addValue(3, "HD", "2011");
        lineDataset.addValue(3, "HD", "2012");

        lineDataset.addValue(16, "HBP", "2009");
        lineDataset.addValue(15, "HBP", "2010");
        lineDataset.addValue(18, "HBP", "2011");
        lineDataset.addValue(17, "HBP", "2012");

        lineDataset.addValue(16, "HC", "2009");
        lineDataset.addValue(15, "HC", "2010");
        lineDataset.addValue(16, "HC", "2011");
        lineDataset.addValue(16, "HC", "2012");

        lineDataset.addValue(6, "LBP", "2009");
        lineDataset.addValue(7, "LBP", "2010");
        lineDataset.addValue(6, "LBP", "2011");
        lineDataset.addValue(6, "LBP", "2012");

        final JFreeChart chart = ChartFactory.createLineChart(
                "", // chart title
                "", // domain axis label
                "", // range axis label
                lineDataset, // data
                PlotOrientation.VERTICAL, // orientation
                false, // include legend
                false, // tooltips
                false // urls
        );

        chart.setBackgroundPaint(Color.WHITE);
        final CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.WHITE);
        plot.setOutlineVisible(false);
        plot.setRangeGridlinePaint(Color.white);

        final CategoryAxis categoryAxis = plot.getDomainAxis();
        categoryAxis.setAxisLineVisible(true);
        categoryAxis.setTickMarksVisible(false);
        categoryAxis.setMaximumCategoryLabelLines(2);
        categoryAxis.setLowerMargin(-0.1);

        categoryAxis.setTickLabelPaint(Color.decode("#222222"));
        chart.setPadding(new RectangleInsets(0, -8, 0, 0));

//        categoryAxis.setTickLabelFont(font);
        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setVisible(true);
//        rangeAxis.setRange(minRange, maxRange);
//        rangeAxis.setTickUnit(new NumberTickUnit(2));
        rangeAxis.setTickLabelsVisible(true);
        rangeAxis.setLowerMargin(1);

        final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
        renderer.setBaseShapesVisible(true);
        renderer.setBaseShapesFilled(true);
        renderer.setSeriesStroke(0, new BasicStroke(1.2f));
        renderer.setSeriesItemLabelsVisible(1, Boolean.TRUE);
        Shape circle = new Ellipse2D.Double(-3, -3, 6, 6);
        renderer.setSeriesShape(0, circle);
        renderer.setSeriesShape(1, circle);
        renderer.setSeriesShape(2, circle);
        renderer.setSeriesShape(3, circle);
        renderer.setSeriesShape(4, circle);
        renderer.setSeriesShape(5, circle);
//        renderer.setBaseItemLabelGenerator(new CustomLabelGenerator());
        renderer.setItemLabelAnchorOffset(-5);
        renderer.setBaseItemLabelsVisible(true);

        plot.getRenderer().setSeriesPaint(0, Color.decode("#4E7AD3"));
        plot.getRenderer().setSeriesPaint(1, Color.decode("#DC3912"));
        plot.getRenderer().setSeriesPaint(2, Color.decode("#FF9900"));
        plot.getRenderer().setSeriesPaint(3, Color.decode("#109618"));
        plot.getRenderer().setSeriesPaint(4, Color.decode("#990099"));
        plot.getRenderer().setSeriesPaint(5, Color.decode("#0099C6"));
//        renderer.setBaseItemLabelFont(font);

//        plot.getRenderer().setSeriesPaint(1, Color.WHITE);

        try {
            BufferedImage bi;

            bi = chart.createBufferedImage(300, 100);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write(bi, "png", baos);
            byte[] byteArray = baos.toByteArray();
//            rangeAxis.setRangeWithMargins(min(min), max(max));
            String rootpath = this.getRootPath();
            String imagePath = rootpath + TEMP_FILE_PATH + File.separator + "HighLightGraph_" + 1 + ".png";
            System.out.println("=========imagePath============"+imagePath);
            ChartUtilities.saveChartAsPNG(new File(imagePath), chart, 500, 300);
//            this.recordImageData("highlightChart" + "-" + "1", org.apache.catalina.util.Base64.encode(byteArray));
        } catch (Exception e) {

        }

最佳答案

添加行:

plot.setAxisOffset(new RectangleInsets(0,0,0,0));

之后的代码

最终的 CategoryPlot 图 = (CategoryPlot) Chart.getPlot();

enter image description here

Link to JFreeChart Java Doc

关于java - jfreecharts中如何调整x、y轴线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21628277/

相关文章:

java - IMAP 列表扩展 JAVA

java - 如何查看 jOOQ 执行的 SQL 语句?

java - Java 中 if/else 与 switch 语句的相对性能差异是什么?

ios - Swift:图表填充线等

javascript - 奇怪的标签/工具提示行为,nvd3 折线图

java - jfreechart - 为每个饼图自定义饼图标签

java - 如何使用 Intellij 插件开发 API 将 jar 复制到 libs 文件夹中

java - 如何使用 jbutton 清除 jtable 中的数据

java - 装饰 JFreeChart

python - openpyxl 图表误差线样式