我已实施MP LineChart。除了one之外,每件事都有效。它在x轴的末尾增加了第一个月。值从第二点开始,而不是从第一点开始。我尝试了谷歌提供的几个解决方案,但无法成功。 例如,在下面的屏幕截图中,我的月份列表包含[apr,may,jun,jul,aug]但是它在末尾添加额外的apr并且行从可能不是apr开始。 以下是我的代码。
String[] mMonths;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_multi_line_chart);
context = this;
mpref = new MySharedPreferences(this);
charts_list = new ArrayList<Charts_Data_Model>();
mChart = (LineChart) findViewById(R.id.chart1);
mChart.setOnChartValueSelectedListener(this);
mChart.setDrawGridBackground(false);
mChart.setDescription("VSC CHART");
mChart.setDrawBorders(false);
mChart.getAxisLeft().setEnabled(true);
mChart.getAxisRight().setDrawAxisLine(false);
mChart.getAxisRight().setEnabled(false);
mChart.getAxisRight().setDrawGridLines(false);
mChart.getXAxis().setDrawAxisLine(true);
mChart.getXAxis().setDrawGridLines(true);
// enable touch gestures
mChart.setTouchEnabled(true);
// enable scaling and dragging
mChart.setDragEnabled(true);
mChart.setScaleEnabled(true);
// if disabled, scaling can be done on x- and y-axis separately
mChart.setPinchZoom(true);
Legend l = mChart.getLegend();
l.setPosition(Legend.LegendPosition.ABOVE_CHART_LEFT);
l.setXEntrySpace(7f);
l.setYEntrySpace(0f);
l.setYOffset(0f);
l.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT);
l.setWordWrapEnabled(true);
new Task4().execute();
}
class Task4 extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
pDialog = new ProgressDialog(MultiLineChartActivity.this);
pDialog.setMessage("please wait");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(Void... arg0) {
getChartDataHadsM();
//Record method
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
XAxis xAxis = mChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setAxisMinValue(0f);
xAxis.setAvoidFirstLastClipping(true);
// xAxis.setGranularityEnabled(false);
xAxis.setGranularity(1f);
xAxis.setValueFormatter(new AxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return mMonths[(int) value % mMonths.length];
}
@Override
public int getDecimalDigits() {
return 0;
}
});
LineData data = new LineData(sets);
mChart.setData(data);
mChart.invalidate();
pDialog.dismiss();
}
}
public void getChartDataHadsM() {
mMonths = new String[charts_list_HadsM.size()];
ArrayList<Entry> e1 = new ArrayList<Entry>();
ArrayList<Entry> e2 = new ArrayList<Entry>();
int size = charts_list_HadsM.size();
for (int i = 0; i < size; i++) {
String month = charts_list_HadsM.get(i).month;
mMonths[i] = month;
String anx = charts_list_HadsM.get(i).anx;
String dep = charts_list_HadsM.get(i).dep;
e1.add(new Entry(i + 1, Integer.parseInt(anx)));
e2.add(new Entry(i + 1, Integer.parseInt(dep)));
}
sets = new ArrayList<ILineDataSet>();
if (!e1.isEmpty()) {
LineDataSet d1 = new LineDataSet(e1, "anxiety");
d1.setLineWidth(2.5f);
d1.setCircleRadius(4.5f);
d1.setHighLightColor(Color.rgb(244, 117, 117));
d1.setDrawValues(false);
sets.add(d1);
}
if (!e2.isEmpty()) {
LineDataSet d2 = new LineDataSet(e2, "depression");
d2.setLineWidth(2.5f);
d2.setCircleRadius(4.5f);
d2.setHighLightColor(Color.rgb(244, 117, 117));
d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]);
d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]);
d2.setDrawValues(false);
sets.add(d2);
}
}
请提供任何提示或帮助。
答案 0 :(得分:1)
我没有使用您使用的图表集。但是你所描述的错误和图像看起来像是搞乱了索引。
我已经查看过该来源,并且发现了以下我发现可疑的内容,您可能需要查看:
for (int i = 0; i < size; i++) {
// your month list is 0-based
String month = charts_list_HadsM.get(i).month;
mMonths[i] = month;
String anx = charts_list_HadsM.get(i).anx;
String dep = charts_list_HadsM.get(i).dep;
// Your data list is 1-based
// You add the data at (i+1) effectively skipping position 0
e1.add(new Entry(i + 1, Integer.parseInt(anx)));
e2.add(new Entry(i + 1, Integer.parseInt(dep)));
}
基本上,你的月份现在有一个传奇太少了,而且当它到达条目末尾时,它似乎会旋转。
符合你的形象:
在APR列中,没有值,它以MAY开头。然后添加值,但是图例中的值比月份多一个。因此,图例将重新启动APR以显示额外值。
我建议修复此问题:
for (int i = 0; i < size; i++) {
// your month list is 0-based
String month = charts_list_HadsM.get(i).month;
mMonths[i] = month;
String anx = charts_list_HadsM.get(i).anx;
String dep = charts_list_HadsM.get(i).dep;
// Make entries index 0-based, too
e1.add(new Entry(i, Integer.parseInt(anx)));
e2.add(new Entry(i, Integer.parseInt(dep)));
}