user3284302
user3284302

Reputation: 139

achartengine two bar graph in one graph

I have one question that I want to make two graph in a graph. Which means one bar graph start from 0 and one graph which is start from 100. In other words, for example, one graph 0~20 and in the same vertical value, 80~100.

And one more question is now, my y-axis variables are not showing fully. Is there any way to fix this? thank you.

this is my code:

  public Intent execute(Context context) {
    double[] minValues = new double[] { 0,0,0,0,0,0,0,0,0,0,0,0 };
    double[] maxValues = new double[] { 7, 12, 24, 28, 33, 35, 37, 36, 28, 19, 11, 4 };
    double[] minValues2 = new double[] { 80,70,60,30,20,10,30,40,50,60,80,90 };
    double[] maxValues2 = new double[] {100, 100, 100, 100, 100, 100, 100, 100, 100,100, 100,100 };

    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
    RangeCategorySeries series = new RangeCategorySeries("Temperature");
    RangeCategorySeries series2 = new RangeCategorySeries("Temperature2");
    int length = minValues.length;
    for (int k = 0; k < length; k++) {
      series.add(minValues[k], maxValues[k]);
    }
    for (int k = 0; k < length; k++) {
        series2.add(minValues[k], maxValues[k]);
      }
    dataset.addSeries(series.toXYSeries());
    dataset.addSeries(series2.toXYSeries());
    int[] colors = new int[] { Color.CYAN };
    XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
    renderer.setOrientation(Orientation.VERTICAL);

    setChartSettings(renderer, "Monthly temperature range", "", "Percentage", 0.5, 12.5,
        0, 100, Color.GRAY, Color.LTGRAY);
    renderer.setBarSpacing(0.5);
    renderer.setXLabels(0);
    renderer.setYLabels(10);
    renderer.addXTextLabel(0.9, "Var1");
    renderer.addXTextLabel(1.9, "Var2");
    renderer.addXTextLabel(2.9, "Var3");
    renderer.addXTextLabel(3.9, "Var4");
    renderer.addXTextLabel(4.9, "Var5");
    renderer.addXTextLabel(5.9, "Var6");
    renderer.addXTextLabel(6.9, "Var7");
    renderer.addXTextLabel(7.9, "Var8");
    renderer.addXTextLabel(8.9, "Var9");
    renderer.addXTextLabel(9.9, "Var10");
    renderer.addXTextLabel(10.9, "Var11");
    renderer.addXTextLabel(11.9, "Var12");
    renderer.setYLabelsPadding(30);
    renderer.setYLabelsAlign(Align.LEFT);
    double xMin=0;
    double xMax=100;
    double ymin=0;
    double ymax=100;
    double[] limits = new double[] {xMin,xMax,ymin,ymax};
    renderer.setMargins(new int[] {30, 70, 10, 0});
    renderer.setYLabelsAlign(Align.RIGHT);

    renderer.setPanLimits(limits);
    SimpleSeriesRenderer r = renderer.getSeriesRendererAt(0);
    r.setDisplayChartValues(true);
    r.setChartValuesTextSize(12);
    r.setChartValuesSpacing(3);
    r.setGradientEnabled(true);
    r.setGradientStart(-20, Color.BLUE);
    r.setGradientStop(20, Color.GREEN);
    return ChartFactory.getRangeBarChartIntent(context, dataset, renderer, Type.DEFAULT,
        "Temperature range");

Its showing error. Is there anyone who could help this? Thank you.!

Upvotes: 0

Views: 136

Answers (1)

Martin
Martin

Reputation: 4846

Setting the render elements for each axis (0 or 1) is what you want to do:

        renderer.setYTitle(cUnits,0);

    renderer.setLabelsColor(Color.WHITE);
    renderer.setXLabelsColor(Color.GREEN);
    renderer.setYLabelsColor(0, colors[0]);   <! -- left axis -->
    renderer.setYLabelsColor(1, colors[1]);   <! -- right axis -->

    renderer.setYTitle(dunits, 1);
    renderer.setYAxisAlign(Align.RIGHT, 1);
    renderer.setYLabelsAlign(Align.RIGHT, 1);

Upvotes: 1

Related Questions