MPAndroidChart:无法使用多个图表向lineChart添加图例

时间:2016-09-28 08:30:27

标签: android mpandroidchart

我坚持使用MPAndroidChart在图表上添加图例。我想这是因为呈现了多个图表。 我已经用谷歌搜索了它。我已经尝试过像这样的东西:

Legend l = chart.getLegend(); 
l.setEnabled(true); 

寻求你的帮助。 提前谢谢。

这是 ChartActivity

public class StatisticActivity extends BaseActivity { 

private LineChart[] mCharts = new LineChart[4]; 
private Date mCurrDay; 

private Date getStartDay() { 
return DateHelper.getStartDay(Calendar.getInstance().getTime()); 
} 


@Override 
public void initViews() { 
mCharts[0] = (LineChart) findViewById(R.id.chart1); 
mCharts[1] = (LineChart) findViewById(R.id.chart2); 
mCharts[2] = (LineChart) findViewById(R.id.chart3); 
mCharts[3] = (LineChart) findViewById(R.id.chart4); 
for (int i = 0; i < mCharts.length; i++) { 

LineData data = getData(i); 

// add some transparency to the color with "& 0x90FFFFFF" 
setupChart(mCharts[i], data, mColors[i % mColors.length]); 
} 
} 


private LineData getData(int category) { 
mCurrDay = getStartDay(); 

ArrayList<Entry> yVals = new ArrayList<>(); 
int c = Integer.valueOf(DateHelper.convertToString(mCurrDay).substring(11)) + 7; 
for (int i = Integer.valueOf(DateHelper.convertToString(mCurrDay).substring(11)); i < c; i++) { 
float val = (float) DbHelper.getInstance(context).getDailyStatistic(DateHelper.convertToString(mCurrDay), String.valueOf(category)); 
yVals.add(new Entry(i, val)); 
mCurrDay = DateHelper.goToNextDay(mCurrDay); 
} 

// create a dataset and give it a type 
LineDataSet set1 = new LineDataSet(yVals, "DataSet 1"); 
set1.setFillAlpha(110); 
set1.setFillColor(Color.RED); 
set1.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER); 
// set1.setLineWidth(1.75f); 
set1.setDrawCircles(false); 
set1.setDrawCircleHole(false); 
set1.setDrawFilled(true); 
if (Utils.getSDKInt() >= 18) { 
// fill drawable only supported on api level 18 and above 
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red); 
set1.setFillDrawable(drawable); 
} else { 
set1.setFillColor(Color.BLACK); 
} 
set1.setColor(Color.WHITE); 
set1.setHighLightColor(Color.WHITE); 
set1.setDrawValues(false); 
set1.setLabel("Label"); 


// create a data object with the datasets 
LineData data = new LineData(set1); 
return data; 
} 

private int[] mColors = new int[]{ 
Color.rgb(137, 230, 81), 
Color.rgb(240, 240, 30), 
Color.rgb(89, 199, 250), 
Color.rgb(250, 104, 104) 
}; 

private void setupChart(LineChart chart, LineData data, int color) { 

((LineDataSet) data.getDataSetByIndex(0)).setCircleColorHole(color); 

// no description text 
chart.setDescription("Descr"); 
chart.setDescriptionColor(Color.WHITE); 
chart.setNoDataTextDescription("You need to provide data for the chart."); 
chart.setDrawGridBackground(false); 
chart.setTouchEnabled(true); 
chart.setDragEnabled(true); 
chart.setScaleEnabled(true); 
chart.setPinchZoom(true); 

chart.setBackgroundColor(color); 

// set custom chart offsets (automatic offset calculation is hereby disabled) 
// chart.setViewPortOffsets(10, 0, 10, 0); 

// add data 
chart.setData(data); 

// get the legend (only possible after setting data) 
// Legend l = chart.getLegend(); 
// l.setEnabled(true); 
// l.setForm(Legend.LegendForm.LINE); 
// l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); 
//
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); 
// l.setOrientation(Legend.LegendOrientation.HORIZONTAL); 
// l.setDrawInside(false); 
// l.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT); 
// l.setWordWrapEnabled(true); 
// l.setYEntrySpace(30); 
// l.setXEntrySpace(30); 
// l.setFormSize(30); 

Legend l = chart.getLegend(); 
l.setFormSize(10f); // set the size of the legend forms/shapes 
l.setForm(Legend.LegendForm.CIRCLE); // set what type of form/shape should be used 
l.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT); 
l.setTextSize(12f); 
l.setTextColor(Color.BLACK); 
l.setXEntrySpace(5f); // set the space between the legend entries on the x-axis 
l.setYEntrySpace(5f); // set the space between the legend entries on the y-axis 

// set custom labels and colors 
l.setCustom(new int[]{Color.WHITE}, new String[] {"LEGEND"}); 


chart.getAxisLeft().setEnabled(true); 
// chart.getAxisLeft().setSpaceTop(80); 
chart.getAxisLeft().setAxisLineColor(Color.WHITE); 
// chart.getAxisLeft().setSpaceBottom(80); 
chart.getAxisLeft().setDrawAxisLine(false); 
chart.getAxisLeft().setGridColor(Color.WHITE); 
chart.getAxisLeft().setTextColor(Color.WHITE); 
chart.getAxisLeft().setLabelCount(4, false); 
chart.getAxisLeft().setAxisMinValue(0); 
chart.getAxisRight().setEnabled(false); 

XAxis xAxis = chart.getXAxis(); 
xAxis.setEnabled(true); 
xAxis.setPosition(XAxis.XAxisPosition.TOP); 
xAxis.setDrawGridLines(false); 
xAxis.setDrawAxisLine(false); 
xAxis.setAxisLineColor(Color.WHITE); 
xAxis.setTextColor(Color.WHITE); 
xAxis.setValueFormatter(new AxisValueFormatter() { 
@Override 
public String getFormattedValue(float value, AxisBase axis) { 
switch ((int) value) { 
case 1: 

default: 
return "0"; 
} 
} 

@Override 
public int getDecimalDigits() { 
return 0; 
} 
}); 

// animate calls invalidate()... 
chart.animateX(2500); 

} 
}

1 个答案:

答案 0 :(得分:0)

我发现了什么问题。 因此,要显示图例我需要使用setEnabled(true)并使用chart.invalidate()

这是我的代码:

Legend legend = chart.getLegend();
        legend.setYOffset(40);
        legend.setForm(Legend.LegendForm.CIRCLE);
        legend.setTextColor(Color.WHITE);
        legend.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT);
        legend.setTextSize(200);
        chart.invalidate();