3

1.棒グラフには系列が 1 つあります。

2.直列には10の値があります。

3.チャートが表示されている場合、バーは 10 本ありますが、すべてのバーは同じ色です。

4.バーの色を変えるには?

私はこれをやろうとしていますが、うまくいきません

class MyBarRenderer extends BarRenderer<MyBarFormatter> {
    public MyBarRenderer(XYPlot plot) {
        super(plot);
    }

    protected BarFormatter getFormatter(int index, XYSeries series) {
        //return getFormatter(series);
        if(index % 2 == 1) {
            return new MyBarFormatter(Color.BLUE, Color.TRANSPARENT);
        } else {
            return new MyBarFormatter(Color.RED, Color.TRANSPARENT);
        }
    }
}
4

1 に答える 1

3

私のコードはあなたのものとほとんど同じに見えますが、うまくいきました。これが私のコードの残りの部分です:

class MyBarFormatter extends BarFormatter
{
    public MyBarFormatter(int fillColor, int borderColor)
    {
        super(fillColor, borderColor);
    }

    @Override public Class<? extends SeriesRenderer> getRendererClass()
    {
        return MyBarRenderer.class;
    }

    @Override public SeriesRenderer getRendererInstance(XYPlot plot)
    {
        return new MyBarRenderer(plot);
    }
}

class MyBarRenderer extends BarRenderer<MyBarFormatter>
{
    public MyBarRenderer(XYPlot plot)
    {
        super(plot);
    }

    public MyBarFormatter getFormatter(int index, XYSeries series)
    {
        // return getFormatter(series);
        if(index % 2 == 1)
        {
            return new MyBarFormatter(Color.BLUE, Color.TRANSPARENT);
        }
        else
        {
            return new MyBarFormatter(Color.RED, Color.TRANSPARENT);
        }
    }
}

これら 2 つのクラスを使用するには、次のコードを呼び出します。

// Create an array of y-values to plot:
Number[] values = { 380, 1433, 1965, 3200, 3651, 3215, 3217, 1000, 500, 4300, 3000, 2100 };

// Turn the above array into XYSeries':
XYSeries series1 = new SimpleXYSeries(Arrays.asList(values), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series1");

// Add a new series to the xyplot:
MyBarFormatter formatter1 = new MyBarFormatter(Color.argb(200, 100, 150, 100), Color.LTGRAY);
mySimpleXYPlot.addSeries(series1, formatter1);

// Give each bar a fixed width
MyBarRenderer renderer = ((MyBarRenderer) mySimpleXYPlot.getRenderer(MyBarRenderer.class));
renderer.setBarWidthStyle(BarRenderer.BarWidthStyle.FIXED_WIDTH);
renderer.setBarWidth(50);

2 つの異なる色を交互に使用すると、次のようになります。

ここに画像の説明を入力

また、破線の水平線を追加するには:

YValueMarker yValueMarker = new YValueMarker(2300, "", new XPositionMetric(PixelUtils.dpToPix(0), XLayoutStyle.ABSOLUTE_FROM_RIGHT), Color.BLACK, Color.BLACK);

DashPathEffect dashPathEffect = new DashPathEffect(new float[] { PixelUtils.dpToPix(16), PixelUtils.dpToPix(8) }, 0);

yValueMarker.getLinePaint().setPathEffect(dashPathEffect);

yValueMarker.getLinePaint().setStrokeWidth(PixelUtils.dpToPix(1));

yValueMarker.getLinePaint().setColor(Color.BLACK);

addMarker(yValueMarker);
于 2014-10-23T19:03:11.277 に答える