Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在折线图中的X_轴上显示一个额外值的MP图?_Java_Android_Charts - Fatal编程技术网

Java 在折线图中的X_轴上显示一个额外值的MP图?

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

我已经实现了MP线形图。除了一个以外,所有的东西都在工作。它在x轴的末尾加上第一个月。值从第二点开始,而不是从第一点开始。我尝试了谷歌提供的几种解决方案,但都没有成功。 e、 在下面的屏幕截图中,我的月份列表包含[apr,may,jun,jul,jul,aug],但它在末尾添加了额外的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);
    }


}
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