Как сделать пространство между столбцами в гистограмме с помощью Achartengine, если каждый столбец имеет разный цвет, содержащий разные значения

Я показываю 4 значения в гистограмме, где каждая полоса имеет свой цвет. когда я показываю график, каждый столбец перекрывает друг друга. Я хочу освободить пространство между полосами, которые я пробовал с setBarSpacing(), поставив разные значения, но это не работает. есть ли другая идея.

package com.example.barchartview;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Color;
import android.view.View;
import android.widget.LinearLayout;


@SuppressLint("ParserError")
public class MainActivity extends Activity {
    private GraphicalView BarChartView;


    @SuppressLint("ParserError")
    @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (BarChartView==null )
        {

        XYMultipleSeriesRenderer renderer = buildBarRenderer();
        setChartSettings(renderer);
        BarChartView  = ChartFactory.getBarChartView(this, getBarDataset(), renderer, Type.DEFAULT);
        LinearLayout playout = (LinearLayout) findViewById(R.id.graph2);
        playout.addView(BarChartView);
        ;

        }
        else
        {
            BarChartView.repaint();
            BarChartView.setVisibility(View.GONE);
        }
    }

    private void setChartSettings(XYMultipleSeriesRenderer renderer)
    {
        renderer.setYTitle("Hits");
        renderer.setXAxisMin(0);
        renderer.setXAxisMax(7);
        renderer.setYAxisMin(0);
        renderer.setYAxisMax(900);
    }
    private XYMultipleSeriesDataset getBarDataset()
    {
        int[] y = {624,430,712,323};
        CategorySeries series1 = new CategorySeries("A");
        CategorySeries series2 = new CategorySeries("B");
        CategorySeries series3 = new CategorySeries("C");
        CategorySeries series4 = new CategorySeries("D");

        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

        series1.add(y[0]);
        dataset.addSeries(series1.toXYSeries());

        series2.add(y[1]);
        dataset.addSeries(series2.toXYSeries());

        series3.add(y[2]);
        dataset.addSeries(series3.toXYSeries());

        series4.add(y[3]);
        dataset.addSeries(series4.toXYSeries());

        return dataset;
    }
    protected XYMultipleSeriesRenderer buildBarRenderer() {
        XYMultipleSeriesRenderer mrenderer = new XYMultipleSeriesRenderer();

        double[] range = {0,5,0,5};

        mrenderer.setAxisTitleTextSize(16);
        mrenderer.setChartTitleTextSize(20);
        mrenderer.setLabelsTextSize(15);
        mrenderer.setLegendTextSize(15);
        mrenderer.setBarSpacing(0);
        mrenderer.setXLabels(1);
        mrenderer.addXTextLabel(2.5, "");
        mrenderer.setMargins(new int[] {20, 30, 15, 0});
        mrenderer.setAxesColor(Color.WHITE);
        mrenderer.setChartTitle("");
        mrenderer.setXTitle("");
        mrenderer.setInitialRange(range, 1);

        XYSeriesRenderer renderer1 = new XYSeriesRenderer();
        renderer1.setColor(Color.GREEN);
        XYSeriesRenderer renderer2 = new XYSeriesRenderer();
        renderer2.setColor(Color.RED);
        XYSeriesRenderer renderer3 = new XYSeriesRenderer();
        renderer3.setColor(Color.BLUE);
        XYSeriesRenderer renderer4 = new XYSeriesRenderer();
        renderer4.setColor(Color.CYAN);

        mrenderer.addSeriesRenderer(renderer1);
        mrenderer.addSeriesRenderer(renderer2);
        mrenderer.addSeriesRenderer(renderer3);
        mrenderer.addSeriesRenderer(renderer4);

        return mrenderer;
    }
}

вот мой код.

вот мой файл activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainActivity"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout android:id="@+id/graph2"
       android:layout_width="160dip"
        android:layout_height="200dip"
        android:scaleType="fitEnd"
        android:layout_marginTop="40dip"
        android:layout_marginLeft="790dip"/>

  </RelativeLayout>

person Abhijit Chakra    schedule 07.12.2012    source источник
comment
Хм, изменение setBarSpacing() заметно меняет демонстрационное приложение, особенно SalesStackedBarChart.java. Опубликуйте свой код, чтобы мы могли видеть, что не так.   -  person Sam    schedule 07.12.2012
comment
да, я вставил свой код, пожалуйста, проверьте его, спасибо!!!!   -  person Abhijit Chakra    schedule 07.12.2012
comment
Вы вызываете много методов дважды, включая setBarSpacing(). Какие setBarSpacing() вы меняли первое или второе? (Вы должны удалить повторяющиеся вызовы, поскольку они ничего не делают.)   -  person Sam    schedule 07.12.2012
comment
первый (удален второй setBarspacing()), я отредактировал свой код, но все тот же эффект.   -  person Abhijit Chakra    schedule 07.12.2012
comment
Метод setBarSpacing() добавляет буфер между барами с разными индексами, все четыре ваших бара находятся с одним и тем же индексом. Вы можете переключиться на использование только одного средства визуализации и набора данных: скриншот, все столбцы имеют такого же цвета. Я не знаю, как добавить расстояние между барами в одном и том же индексе.   -  person Sam    schedule 07.12.2012
comment
я знаю, как сделать пространство между столбцами, если они одного цвета. Можно ли сделать каждый столбец с разными индексами здесь на графике.   -  person Abhijit Chakra    schedule 07.12.2012
comment
@rickky Вы только что приняли ответ, который почти полностью копирует мой ответ. Очень мило с твоей стороны!   -  person Dan D.    schedule 27.04.2013
comment
Я также сталкиваюсь с проблемой: диаграмма для нулевых значений и показывает u"> stackoverflow.com/questions/16355225/ Пожалуйста, поделитесь кодом..   -  person user2190720    schedule 06.05.2013


Ответы (1)


Я изменил все ваши серии на XYSeries и добавил их просто в dataset, не вызывая дополнительных методов.

XYSeries series1 = new XYSeries("A");
dataset.addSeries(series1);

Затем добавьте данные, как в обычном XYChart, вот так:

series1.add(1, value);
series2.add(2, value);
person Dan D.    schedule 05.02.2013
comment
можете вы помочь мне? Вот мой вопрос stackoverflow.com/questions/ 14851820/ - person moDev; 13.02.2013