Java 在折线图中的X_轴上显示一个额外值的MP图?
我已经实现了MP线形图。除了一个以外,所有的东西都在工作。它在x轴的末尾加上第一个月。值从第二点开始,而不是从第一点开始。我尝试了谷歌提供的几种解决方案,但都没有成功。 e、 在下面的屏幕截图中,我的月份列表包含[apr,may,jun,jul,jul,aug],但它在末尾添加了额外的apr,行从五月开始,而不是从四月开始。 下面是我的代码Java 在折线图中的X_轴上显示一个额外值的MP图?,java,android,charts,Java,Android,Charts,我已经实现了MP线形图。除了一个以外,所有的东西都在工作。它在x轴的末尾加上第一个月。值从第二点开始,而不是从第一点开始。我尝试了谷歌提供的几种解决方案,但都没有成功。 e、 在下面的屏幕截图中,我的月份列表包含[apr,may,jun,jul,jul,aug],但它在末尾添加了额外的apr,行从五月开始,而不是从四月开始。 下面是我的代码 String[] mMonths; @Override protected void onCreate(Bundle savedInstanceSt
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);
}
}
String[]字符串;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
setContentView(R.layout.activity\u multi\u line\u图表);
上下文=这个;
mpref=新的MySharedPreferences(此);
charts_list=new ArrayList();
mChart=(线形图)findViewById(R.id.chart1);
mChart.setOnChartValueSelectedListener(此);
mChart.setDrawGridBackground(假);
mChart.setDescription(“VSC图表”);
mChart.setDrawBorders(假);
mChart.getAxisLeft().setEnabled(true);
mChart.getAxisRight().setDrawAxisLine(false);
mChart.getAxisRight().setEnabled(false);
mChart.getAxisRight().setDrawGridLines(false);
mChart.getXAxis().setDrawAxisLine(true);
mChart.getXAxis().setDrawGridLines(true);
//启用触摸手势
mChart.setTouchEnabled(真);
//启用缩放和拖动
mChart.setDragEnabled(真);
mChart.setScaleEnabled(真);
//如果禁用,可以分别在x轴和y轴上进行缩放
mChart.setPinchZoom(真);
图例l=mChart.getLegend();
l、 设置位置(图例。LegendPosition。上图左上方);
l、 setXEntrySpace(7f);
l、 设置入口空间(0f);
l、 设置偏移量(0f);
l、 设置方向(图例。LegendDirection。从左到右);
l、 setWordWrapEnabled(真);
新建Task4().execute();
}
类Task4扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
pDialog=新建进度对话框(multileChartActivity.this);
pDialog.setMessage(“请稍候”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(无效…arg0){
getChartDataHadsM();
//记录方法
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
XAxis XAxis=mChart.getXAxis();
设置位置(xAxis.XAxisPosition.BOTTOM);
xAxis.setAxisMinValue(0f);
xAxis.setAvoidFirstLastClipping(真);
//xAxis.setGranularityEnabled(假);
xAxis.setGranularity(1f);
setValueFormatter(新的AxisValueFormatter(){
@凌驾
公共字符串getFormattedValue(浮点值,AxisBase轴){
返回mm[(int)值%mm.length];
}
@凌驾
公共整数getDecimalDigits(){
返回0;
}
});
LineData数据=新的LineData(组);
mChart.setData(数据);
mChart.invalidate();
pDialog.disclose();
}
}
public void getChartDataHadsM(){
mmoths=新字符串[charts_list_HadsM.size()];
ArrayList e1=新的ArrayList();
ArrayList e2=新的ArrayList();
int size=charts\u list\u HadsM.size();
对于(int i=0;i
如果您有任何提示或帮助,我们将不胜感激 我没有使用您使用的图表集。但是,您描述的错误和图像看起来像是弄乱了索引 我已经查看了来源,发现了以下我认为可疑的东西,您可能需要检查一下:
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)));
}
for(int i=0;i
基本上,您的月份现在有一个图例太少了,并且似乎图例在到达条目末尾时会旋转
它与您的图像匹配:
在APR列中,没有值,它以五月开始。然后添加这些值,但比图例中的月份多出一个值。因此,图例将以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)));
}
for(int i=0;i