如何将两个条形图相互重叠?
How to overlap two Barcharts over each other?
我正在 android 中创建条形图。我试图将两个条形图相互重叠。我正在使用 MPAndroidChart 中提供的 CombinedChart。但问题是两个条形图一个接一个地出现。
图表截图如下:
蓝条应与绿条重叠。
这是我的代码:
public class MainActivity extends AppCompatActivity {
private CombinedChart combinedChart;
protected String[] mMonths = new String[] {
"Jan", "Feb", "Mar", "Apr", "May", "June"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
combinedChart = (CombinedChart) findViewById(R.id.combinedChart);
combinedChart.getDescription().setEnabled(false);
combinedChart.setBackgroundColor(Color.WHITE);
combinedChart.setDrawGridBackground(false);
combinedChart.setDrawBarShadow(false);
combinedChart.setHighlightFullBarEnabled(false);
Legend l = combinedChart.getLegend();
l.setWordWrapEnabled(true);
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
YAxis rightAxis = combinedChart.getAxisRight();
rightAxis.setDrawGridLines(false);
rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
YAxis leftAxis = combinedChart.getAxisLeft();
leftAxis.setDrawGridLines(false);
leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
XAxis xAxis = combinedChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTH_SIDED);
xAxis.setAxisMinimum(0f);
xAxis.setGranularity(1f);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return mMonths[(int) value % mMonths.length];
}
});
CombinedData data = new CombinedData();
data.setData(generateBarData());
combinedChart.setData(data);
combinedChart.invalidate();
}
private ArrayList<BarEntry> getBar1Enteries(ArrayList<BarEntry> entries){
entries.add(new BarEntry(1, 25));
entries.add(new BarEntry(2, 30));
entries.add(new BarEntry(3, 38));
entries.add(new BarEntry(4, 10));
entries.add(new BarEntry(5, 15));
return entries;
}
private ArrayList<BarEntry> getBar2Enteries(ArrayList<BarEntry> entries){
entries.add(new BarEntry(1, 20));
entries.add(new BarEntry(2, 25));
entries.add(new BarEntry(3, 33));
entries.add(new BarEntry(4, 5));
entries.add(new BarEntry(5, 10));
return entries;
}
private BarData generateBarData() {
ArrayList<BarEntry> entries1 = new ArrayList<BarEntry>();
ArrayList<BarEntry> entries2 = new ArrayList<BarEntry>();
// for (int index = 0; index < 12; index++) {
// entries1.add(new BarEntry(0, getRandom(25, 25)));
//
// // stacked
// entries2.add(new BarEntry(0, new float[]{getRandom(13, 12), getRandom(13, 12)}));
// }
BarDataSet set1 = new BarDataSet(getBar1Enteries(entries1), "Bar 1");
set1.setColor(Color.rgb(60, 220, 78));
set1.setValueTextColor(Color.rgb(60, 220, 78));
set1.setValueTextSize(10f);
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
BarDataSet set2 = new BarDataSet(getBar2Enteries(entries2), "");
set2.setStackLabels(new String[]{"Stack 1", "Stack 2"});
set2.setColors(new int[]{Color.rgb(61, 165, 255), Color.rgb(23, 197, 255)});
set2.setValueTextColor(Color.rgb(61, 165, 255));
set2.setValueTextSize(10f);
set2.setAxisDependency(YAxis.AxisDependency.LEFT);
float groupSpace = 0.06f;
float barSpace = 0.02f; // x2 dataset
float barWidth = 0.45f; // x2 dataset
// (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"
BarData d = new BarData(set1, set2);
d.setBarWidth(barWidth);
// make this BarData object grouped
d.groupBars(0, groupSpace, barSpace); // start at x = 0
return d;
}
}
您需要使用Stacked BarChart
BarEntry stackedEntry = new BarEntry(0f, new float[] { 10, 20, 30 });
您还可以查看示例 activity,其中还包含一个 stacked barchart.
我正在 android 中创建条形图。我试图将两个条形图相互重叠。我正在使用 MPAndroidChart 中提供的 CombinedChart。但问题是两个条形图一个接一个地出现。
图表截图如下:
蓝条应与绿条重叠。
这是我的代码:
public class MainActivity extends AppCompatActivity {
private CombinedChart combinedChart;
protected String[] mMonths = new String[] {
"Jan", "Feb", "Mar", "Apr", "May", "June"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
combinedChart = (CombinedChart) findViewById(R.id.combinedChart);
combinedChart.getDescription().setEnabled(false);
combinedChart.setBackgroundColor(Color.WHITE);
combinedChart.setDrawGridBackground(false);
combinedChart.setDrawBarShadow(false);
combinedChart.setHighlightFullBarEnabled(false);
Legend l = combinedChart.getLegend();
l.setWordWrapEnabled(true);
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
YAxis rightAxis = combinedChart.getAxisRight();
rightAxis.setDrawGridLines(false);
rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
YAxis leftAxis = combinedChart.getAxisLeft();
leftAxis.setDrawGridLines(false);
leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
XAxis xAxis = combinedChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTH_SIDED);
xAxis.setAxisMinimum(0f);
xAxis.setGranularity(1f);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return mMonths[(int) value % mMonths.length];
}
});
CombinedData data = new CombinedData();
data.setData(generateBarData());
combinedChart.setData(data);
combinedChart.invalidate();
}
private ArrayList<BarEntry> getBar1Enteries(ArrayList<BarEntry> entries){
entries.add(new BarEntry(1, 25));
entries.add(new BarEntry(2, 30));
entries.add(new BarEntry(3, 38));
entries.add(new BarEntry(4, 10));
entries.add(new BarEntry(5, 15));
return entries;
}
private ArrayList<BarEntry> getBar2Enteries(ArrayList<BarEntry> entries){
entries.add(new BarEntry(1, 20));
entries.add(new BarEntry(2, 25));
entries.add(new BarEntry(3, 33));
entries.add(new BarEntry(4, 5));
entries.add(new BarEntry(5, 10));
return entries;
}
private BarData generateBarData() {
ArrayList<BarEntry> entries1 = new ArrayList<BarEntry>();
ArrayList<BarEntry> entries2 = new ArrayList<BarEntry>();
// for (int index = 0; index < 12; index++) {
// entries1.add(new BarEntry(0, getRandom(25, 25)));
//
// // stacked
// entries2.add(new BarEntry(0, new float[]{getRandom(13, 12), getRandom(13, 12)}));
// }
BarDataSet set1 = new BarDataSet(getBar1Enteries(entries1), "Bar 1");
set1.setColor(Color.rgb(60, 220, 78));
set1.setValueTextColor(Color.rgb(60, 220, 78));
set1.setValueTextSize(10f);
set1.setAxisDependency(YAxis.AxisDependency.LEFT);
BarDataSet set2 = new BarDataSet(getBar2Enteries(entries2), "");
set2.setStackLabels(new String[]{"Stack 1", "Stack 2"});
set2.setColors(new int[]{Color.rgb(61, 165, 255), Color.rgb(23, 197, 255)});
set2.setValueTextColor(Color.rgb(61, 165, 255));
set2.setValueTextSize(10f);
set2.setAxisDependency(YAxis.AxisDependency.LEFT);
float groupSpace = 0.06f;
float barSpace = 0.02f; // x2 dataset
float barWidth = 0.45f; // x2 dataset
// (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"
BarData d = new BarData(set1, set2);
d.setBarWidth(barWidth);
// make this BarData object grouped
d.groupBars(0, groupSpace, barSpace); // start at x = 0
return d;
}
}
您需要使用Stacked BarChart
BarEntry stackedEntry = new BarEntry(0f, new float[] { 10, 20, 30 });
您还可以查看示例 activity,其中还包含一个 stacked barchart.