如何将 mpandroidchart 库中的两个条形图分组

how to group two barchat from mpandroidchart lib

我想以两个条形图为一组显示以下条形图:

如有任何反馈,我们将不胜感激。

代码如下:

public class BarChartActivityMultiDataset extends DemoBase implements
OnSeekBarChangeListener {

private BarChart mChart;
private SeekBar mSeekBarX, mSeekBarY;
private TextView tvX, tvY;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_barchart);

    tvX = (TextView) findViewById(R.id.tvXMax);
    tvY = (TextView) findViewById(R.id.tvYMax);

    mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
    mSeekBarX.setOnSeekBarChangeListener(this);

    mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
    mSeekBarY.setOnSeekBarChangeListener(this);

    mChart = (BarChart) findViewById(R.id.chart1);
    mChart.setDescription("");

    ColorTemplate ct = new ColorTemplate();

    // add colors for the first dataset
    ct.addDataSetColors(new int[]{ R.color.colorful_5}, this);

    // the second dataset only has one color
    ct.addDataSetColors(new int[] {
        R.color.greens_2
    }, this);

    // add colors for the third dataset
    //ct.addDataSetColors(ColorTemplate.COLORFUL_COLORS, this);

    mChart.setColorTemplate(ct);
    mChart.setBarSpace(30f);
    // disable the drawing of values
    mChart.setDrawYValues(false);

    // disable 3D
    mChart.set3DEnabled(false);
    mChart.setYLabelCount(10);

    // scaling can now only be done on x- and y-axis separately
    mChart.setPinchZoom(false);

    //        mChart.setDrawLegend(false);

    mSeekBarX.setProgress(45);
    mSeekBarY.setProgress(100);

    Legend l = mChart.getLegend();
    l.setPosition(LegendPosition.RIGHT_OF_CHART);


    }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.bar, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.actionToggleValues: {
            if (mChart.isDrawYValuesEnabled())
                mChart.setDrawYValues(false);
            else
                mChart.setDrawYValues(true);
            mChart.invalidate();
            break;
        }
        case R.id.actionTogglePinch: {
            if (mChart.isPinchZoomEnabled())
                mChart.setPinchZoom(false);
            else
                mChart.setPinchZoom(true);

            mChart.invalidate();
            break;
        }
        case R.id.actionToggle3D: {
            if (mChart.is3DEnabled())
                mChart.set3DEnabled(false);
            else
                mChart.set3DEnabled(true);
            mChart.invalidate();
            break;
        }
        case R.id.actionToggleHighlight: {
            if (mChart.isHighlightEnabled())
                mChart.setHighlightEnabled(false);
            else
                mChart.setHighlightEnabled(true);
            mChart.invalidate();
            break;
        }
        case R.id.actionToggleHighlightArrow: {
            if (mChart.isDrawHighlightArrowEnabled())
                mChart.setDrawHighlightArrow(false);
            else
                mChart.setDrawHighlightArrow(true);
            mChart.invalidate();
            break;
        }
        case R.id.actionToggleStartzero: {
            if (mChart.isStartAtZeroEnabled())
                mChart.setStartAtZero(false);
            else
                mChart.setStartAtZero(true);

            mChart.invalidate();
            break;
        }
        case R.id.actionToggleAdjustXLegend: {
            XLabels xLabels = mChart.getXLabels();

            if (xLabels.isAdjustXLabelsEnabled())
                xLabels.setAdjustXLabels(false);
            else
                xLabels.setAdjustXLabels(true);

            mChart.invalidate();
            break;
        }
        case R.id.actionSave: {
            // mChart.saveToGallery("title"+System.currentTimeMillis());
            mChart.saveToPath("title" + System.currentTimeMillis(), "");
            break;
        }
    }
    return true;
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean  
fromUser) {

    tvX.setText("" + (mSeekBarX.getProgress() + 1));
    tvY.setText("" + (mSeekBarY.getProgress()));

    ArrayList<String> xVals = new ArrayList<String>();
    for (int i = 0; i < mSeekBarX.getProgress(); i++) {
        xVals.add((i) + "");
    }

    ArrayList<Entry> yVals1 = new ArrayList<Entry>();
    ArrayList<Entry> yVals2 = new ArrayList<Entry>();
   // ArrayList<Entry> yVals3 = new ArrayList<Entry>();

    for (int i = 0; i < mSeekBarX.getProgress() / 3; i++) {
        float val = (float) (Math.random() * mSeekBarY.getProgress()) + 3;
        yVals1.add(new Entry(val, i));

    }

    for (int i = mSeekBarX.getProgress() / 3; i < mSeekBarX.getProgress() /   
     3 ; i++) {
        float val = (float) (Math.random() * mSeekBarY.getProgress()) + 3;
        yVals2.add(new Entry(val, i));
    }

    // create 3 datasets with different types
    DataSet set1 = new DataSet(yVals1, "Finished Packages");
    DataSet set2 = new DataSet(yVals2, "In work Packages");
    //DataSet set3 = new DataSet(yVals3, "Company C");

    ArrayList<DataSet> dataSets = new ArrayList<DataSet>();
    dataSets.add(set1);
    dataSets.add(set2);
   // dataSets.add(set3);

    ChartData data = new ChartData(xVals, dataSets);

    mChart.setData(data);
    mChart.invalidate();
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
    // TODO Auto-generated method stub
}
}

我刚刚用上面的代码更新了下面的 class BarChartActivityMultiDataset

此致, 奥勒良

public class BarChartActivityMultiDataset extends DemoBase implements
OnSeekBarChangeListener {

private BarChart mChart;
private SeekBar mSeekBarX, mSeekBarY;
private TextView tvX, tvY;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_barchart);

tvX = (TextView) findViewById(R.id.tvXMax);
tvY = (TextView) findViewById(R.id.tvYMax);

mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
mSeekBarX.setOnSeekBarChangeListener(this);

mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
mSeekBarY.setOnSeekBarChangeListener(this);

mChart = (BarChart) findViewById(R.id.chart1);
mChart.setDescription("");

ColorTemplate ct = new ColorTemplate();

// add colors for the first dataset
ct.addDataSetColors(new int[]{ R.color.colorful_5}, this);

// the second dataset only has one color
ct.addDataSetColors(new int[] {
    R.color.greens_2
}, this);

// add colors for the third dataset
//ct.addDataSetColors(ColorTemplate.COLORFUL_COLORS, this);

mChart.setColorTemplate(ct);
mChart.setBarSpace(30f);
// disable the drawing of values
mChart.setDrawYValues(false);

// disable 3D
mChart.set3DEnabled(false);
mChart.setYLabelCount(10);

// scaling can now only be done on x- and y-axis separately
mChart.setPinchZoom(false);

 //        mChart.setDrawLegend(false);

mSeekBarX.setProgress(45);
mSeekBarY.setProgress(100);

Legend l = mChart.getLegend();
l.setPosition(LegendPosition.RIGHT_OF_CHART);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.bar, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
    case R.id.actionToggleValues: {
        if (mChart.isDrawYValuesEnabled())
            mChart.setDrawYValues(false);
        else
            mChart.setDrawYValues(true);
        mChart.invalidate();
        break;
    }
    case R.id.actionTogglePinch: {
        if (mChart.isPinchZoomEnabled())
            mChart.setPinchZoom(false);
        else
            mChart.setPinchZoom(true);

        mChart.invalidate();
        break;
    }
    case R.id.actionToggle3D: {
        if (mChart.is3DEnabled())
            mChart.set3DEnabled(false);
        else
            mChart.set3DEnabled(true);
        mChart.invalidate();
        break;
    }
    case R.id.actionToggleHighlight: {
        if (mChart.isHighlightEnabled())
            mChart.setHighlightEnabled(false);
        else
            mChart.setHighlightEnabled(true);
        mChart.invalidate();
        break;
    }
    case R.id.actionToggleHighlightArrow: {
        if (mChart.isDrawHighlightArrowEnabled())
            mChart.setDrawHighlightArrow(false);
        else
            mChart.setDrawHighlightArrow(true);
        mChart.invalidate();
        break;
    }
    case R.id.actionToggleStartzero: {
        if (mChart.isStartAtZeroEnabled())
            mChart.setStartAtZero(false);
        else
            mChart.setStartAtZero(true);

        mChart.invalidate();
        break;
    }
    case R.id.actionToggleAdjustXLegend: {
        XLabels xLabels = mChart.getXLabels();

        if (xLabels.isAdjustXLabelsEnabled())
            xLabels.setAdjustXLabels(false);
        else
            xLabels.setAdjustXLabels(true);

        mChart.invalidate();
        break;
    }
    case R.id.actionSave: {
        // mChart.saveToGallery("title"+System.currentTimeMillis());
        mChart.saveToPath("title" + System.currentTimeMillis(), "");
        break;
    }
 }
 return true;
 }

 @Override
 public void onProgressChanged(SeekBar seekBar, int progress, boolean  
 fromUser) {

tvX.setText("" + (mSeekBarX.getProgress() + 1));
tvY.setText("" + (mSeekBarY.getProgress()));

ArrayList<String> xVals = new ArrayList<String>();
for (int i = 0; i < mSeekBarX.getProgress(); i++) {
    xVals.add((i) + "");
}

ArrayList<Entry> yVals1 = new ArrayList<Entry>();
ArrayList<Entry> yVals2 = new ArrayList<Entry>();

// ArrayList yVals3 = new ArrayList();

for (int i = 0; i < 7; i++) {
    if (i%2 == 0) {
        yVals1.add(new Entry(30, i));   
    } else {
        yVals2.add(new Entry(70, i));
    }
}



// create 3 datasets with different types
DataSet set1 = new DataSet(yVals1, "Finished Packages");
DataSet set2 = new DataSet(yVals2, "In work Packages");
 //DataSet set3 = new DataSet(yVals3, "Company C");

ArrayList<DataSet> dataSets = new ArrayList<DataSet>();
dataSets.add(set1);
dataSets.add(set2);
// dataSets.add(set3);

ChartData data = new ChartData(xVals, dataSets);

mChart.setData(data);
mChart.invalidate();
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
}