【问题标题】:java How to GradientPaint a JFreeChart AreaChartjava如何渐变绘制JFreeChart AreaChart
【发布时间】:2013-11-12 12:48:14
【问题描述】:
public static JFreeChart createAreaChart(double[] v1) {
        XYSeriesCollection dataset = new XYSeriesCollection();
        XYSeries series1 = new XYSeries("First");
        for (int i=0;i<v1.length;i++){
            series1.add( i,v1[i]);
        }
        dataset.addSeries(series1);

        final JFreeChart chart = ChartFactory.createXYAreaChart(
            "XY Area Chart Demo",
            "Domain (X)", "Range (Y)",
            dataset,
            PlotOrientation.VERTICAL,
            true,  // legend
            true,  // tool tips
            false  // URLs
        );

        GradientPaint gp0 = new GradientPaint(
                0.0f, 0.0f, Color.red, 
                0.0f, 100.0f, Color.blue
            );

        chart.setBackgroundPaint(Color.white);

        final XYPlot plot = chart.getXYPlot();
        plot.getRenderer().setSeriesPaint(0, gp0);
        //plot.setOutlinePaint(Color.black);
        plot.setBackgroundPaint(Color.lightGray);
        plot.setForegroundAlpha(0.99f);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);

        final ValueAxis domainAxis = plot.getDomainAxis();
        domainAxis.setTickMarkPaint(Color.black);
        domainAxis.setLowerMargin(0.0);
        domainAxis.setUpperMargin(0.0);

        final ValueAxis rangeAxis = plot.getRangeAxis();
        rangeAxis.setTickMarkPaint(Color.black);
        rangeAxis.setAutoRange(false);
        rangeAxis.setRange(-5.0, 5.0);

        return chart;

    }

我想要下面这样的东西。当我们越过零线时,渐变填充会慢慢切换颜色。

我不明白我应该输入什么:

    GradientPaint gp0 = new GradientPaint(
            0.0f, 0.0f, Color.red, 
            0.0f, 100.0f, Color.blue
        );

【问题讨论】:

    标签: java swing jfreechart gradient


    【解决方案1】:

    做到这一点的最佳方法是拥有 3 个形状。一为黄线。另一个用于绿色渐变,第三个用于红色渐变。

    然后你独立绘制最后两个形状。

    【讨论】:

    • 但是我如何“绘制”曲线下方但在零线上方的区域?
    • @Akira,这个问题与使用 JFreeChart 工具集有关。
    【解决方案2】:

    我相信一个更好的起点是XYDifferenceRenderer 让一个系列保持为零,这样当第二个系列通过它时颜色会改变.. 看看 JFreeChart 中的 DifferenceChartDemo1。将你的两种不同的 Color GradientPaints 放入渲染器的构造函数中。

    这里是渲染器的 API 链接: http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/renderer/xy/XYDifferenceRenderer.html

    【讨论】:

      猜你喜欢
      • 2011-10-27
      • 1970-01-01
      • 2014-10-22
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多