我正在使用MpAndroidChart中的CombinedChart来构建一个可以有多行和一个条形的图表(如图所示)。
然而,CombinedChart只是绘制一个 LineChart。
List<LineData> myLines = populateMyLines();
CombinedData dataChart = new CombinedData(values);
for(LineData line: myLines) {
dataChart.setData(line);
}
dataChart.setData(new BarData(barValues));
chart.setData(dataChart);
答案 0 :(得分:1)
解决方法:强>
LineData linesData = new LineData();
for(LineData dataSet: dataSets) {
linesData.addDataSet(dataSet.getDataSetByIndex(0));
}
dataChart.setData(linesData);
dataChart.setData(generateBarData());
请参阅以下有关从CombinedChart示例修改的示例代码
public class CombinedChartActivity extends DemoBase implements OnChartValueSelectedListener {
private CombinedChart mChart;
private final int itemcount = 12;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_combined);
mChart = (CombinedChart) findViewById(R.id.chart1);
mChart.setDescription("");
mChart.setBackgroundColor(Color.BLACK);
mChart.setDrawGridBackground(false);
mChart.setDrawBarShadow(false);
// draw bars behind lines
mChart.setDrawOrder(new DrawOrder[]{
DrawOrder.BAR, DrawOrder.LINE
});
mChart.setOnChartValueSelectedListener(this);
YAxis rightAxis = mChart.getAxisRight();
rightAxis.setDrawGridLines(false);
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setDrawGridLines(false);
XAxis xAxis = mChart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTH_SIDED);
CombinedData data = new CombinedData(mMonths);
// data.setData(generateCandleData());
LineData mlineData=generateLineData();
mlineData.addDataSet(generateLineData1().getDataSetByIndex(0));
data.setData(mlineData);
data.setData(generateBarData());
// data.setData(generateBubbleData());
// data.setData(generateScatterData());
// data.setData(generateCandleData());
mChart.setData(data);
mChart.invalidate();
}
private LineData generateLineData() {
LineData d = new LineData();
ArrayList<Entry> entries = new ArrayList<Entry>();
for (int index = 0; index < itemcount; index++)
entries.add(new Entry(getRandom(50, 40), index));
LineDataSet set = new LineDataSet(entries, "Line DataSet");
set.setColor(Color.BLUE);
set.setLineWidth(3.5f);
set.setCircleColor(Color.rgb(240, 238, 70));
set.setCircleSize(5f);
// set.setFillColor(Color.rgb(240, 238, 70));
set.setDrawCubic(true);
set.setDrawValues(true);
set.setValueTextSize(10f);
set.setValueTextColor(Color.rgb(240, 238, 70));
set.setHighLightColor(Color.MAGENTA);
set.setAxisDependency(YAxis.AxisDependency.LEFT);
d.addDataSet(set);
return d;
}
private LineData generateLineData1() {
LineData d = new LineData();
ArrayList<Entry> entries = new ArrayList<Entry>();
for (int index = 3; index < itemcount; index++)
entries.add(new Entry(getRandom(10, 40), index));
LineDataSet set = new LineDataSet(entries, "Line DataSet");
set.setColor(Color.RED);
set.setLineWidth(3.5f);
set.setCircleColor(Color.rgb(240, 238, 70));
set.setCircleSize(5f);
// set.setFillColor(Color.rgb(240, 238, 70));
set.setDrawCubic(true);
set.setDrawValues(true);
set.setValueTextSize(10f);
set.setValueTextColor(Color.rgb(240, 238, 70));
set.setHighLightColor(Color.MAGENTA);
set.setAxisDependency(YAxis.AxisDependency.LEFT);
d.addDataSet(set);
return d;
}
private BarData generateBarData() {
BarData d = new BarData();
ArrayList<BarEntry> entries = new ArrayList<BarEntry>();
for (int index = 0; index < itemcount; index++)
entries.add(new BarEntry(getRandom(15, 30), index));
BarDataSet set = new BarDataSet(entries, "Bar DataSet");
set.setColor(Color.rgb(60, 220, 78));
set.setValueTextColor(Color.rgb(60, 220, 78));
set.setValueTextSize(10f);
set.setHighLightColor(Color.RED);
d.addDataSet(set);
set.setAxisDependency(YAxis.AxisDependency.LEFT);
return d;
}
protected ScatterData generateScatterData() {
ScatterData d = new ScatterData();
ArrayList<Entry> entries = new ArrayList<Entry>();
for (int index = 0; index < itemcount; index++)
entries.add(new Entry(getRandom(20, 15), index));
ScatterDataSet set = new ScatterDataSet(entries, "Scatter DataSet");
set.setColor(Color.GREEN);
set.setScatterShapeSize(7.5f);
set.setDrawValues(false);
set.setValueTextSize(10f);
d.addDataSet(set);
return d;
}
protected CandleData generateCandleData() {
CandleData d = new CandleData();
ArrayList<CandleEntry> entries = new ArrayList<CandleEntry>();
for (int index = 0; index < itemcount; index++)
entries.add(new CandleEntry(index, 20f, 10f, 13f, 17f));
CandleDataSet set = new CandleDataSet(entries, "Candle DataSet");
set.setColor(Color.rgb(80, 80, 80));
set.setBodySpace(0.3f);
set.setValueTextSize(10f);
set.setDrawValues(false);
d.addDataSet(set);
return d;
}
protected BubbleData generateBubbleData() {
BubbleData bd = new BubbleData();
ArrayList<BubbleEntry> entries = new ArrayList<BubbleEntry>();
for (int index = 0; index < itemcount; index++) {
float rnd = getRandom(20, 30);
entries.add(new BubbleEntry(index, rnd, rnd));
}
BubbleDataSet set = new BubbleDataSet(entries, "Bubble DataSet");
set.setColors(ColorTemplate.VORDIPLOM_COLORS);
set.setValueTextSize(10f);
set.setValueTextColor(Color.WHITE);
set.setHighlightCircleWidth(1.5f);
set.setDrawValues(true);
bd.addDataSet(set);
return bd;
}
private float getRandom(float range, float startsfrom) {
return (float) (Math.random() * range) + startsfrom;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.combined, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.actionToggleLineValues: {
for (DataSet<?> set : mChart.getData().getDataSets()) {
if (set instanceof LineDataSet)
set.setDrawValues(!set.isDrawValuesEnabled());
}
mChart.invalidate();
break;
}
case R.id.actionToggleBarValues: {
for (DataSet<?> set : mChart.getData().getDataSets()) {
if (set instanceof BarDataSet)
set.setDrawValues(!set.isDrawValuesEnabled());
}
mChart.invalidate();
break;
}
}
return true;
}
@Override
public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
}
@Override
public void onNothingSelected() {
}
}
答案 1 :(得分:0)
我建议您可以尝试使用单行数据并根据需要添加不同的行数据集。当我尝试两种不同的线条时,我遇到了同样的问题。带有SetA的linedata1,带有SetB的linedata2,直到我用具有两个或更多数据集的单行数据解析它。
CombinedData data = new CombinedData(Xvals);
// data.setData(generateCandleData());
LineData d = new LineData();
d.addDataSet(setA);
d.addDataSet(setB)
data.setData(LineData());
data.setData(BarData());
Combinedchart目前由一个XVal集合管理,请注意在Xval,YVal Entry对中编码正确的XVal索引引用