Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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
Android MPChart库正在隐藏包括条形图在内的X轴标签_Android_Bar Chart - Fatal编程技术网

Android MPChart库正在隐藏包括条形图在内的X轴标签

Android MPChart库正在隐藏包括条形图在内的X轴标签,android,bar-chart,Android,Bar Chart,在这里,我尝试使用MPChart库在图表中显示多个条形图。所有值都是动态的,设置得很好。但有些x轴标签总是被隐藏,无论长度是24、7还是30。我尝试使用以下方法使其可滚动: if (dayDataList != null && dayDataList.size() > 0) { chart.getXAxis().setAxisMaximum(dayDataList.size()); } else if (weekDataList != null

在这里,我尝试使用
MPChart
库在图表中显示多个条形图。所有值都是动态的,设置得很好。但有些x轴标签总是被隐藏,无论长度是24、7还是30。我尝试使用以下方法使其可滚动:

  if (dayDataList != null && dayDataList.size() > 0) {
        chart.getXAxis().setAxisMaximum(dayDataList.size());
    } else if (weekDataList != null && weekDataList.size() > 0) {
        chart.getXAxis().setAxisMaximum(weekDataList.size());
    } else if (monthDataList != null && monthDataList.size() > 0) {
        chart.getXAxis().setAxisMaximum(monthDataList.size());
    }
但这对我来说也不管用。有时,它也会跳过一些标签。如需更多说明,请附上屏幕截图

在这里,我试图显示我在
arrayList
中保存的过去24小时的数据,但它隐藏了最后的条和标签。我调试后发现,
arraylist
有24个balue,但没有显示出来。7天的数据也会发生同样的情况。

显示过去7天的数据,但它增加了条本身的大小,并切断了少数条。

在这里,它隐藏了一些条以及
一些标签也丢失了
,所以我试着让它可以滚动,这很有效。希望你对这个问题有一个清晰的了解。更多信息,我将分享我现在使用的代码

 private void initializeView() {
    chart.setOnChartValueSelectedListener(this);
    chart.setDrawBarShadow(false);

    //Hide/Display texts over bars
    chart.setDrawValueAboveBar(false);

    chart.getDescription().setEnabled(false);

    // if more than 60 entries are displayed in the chart, no values will be
    // drawn
    chart.setMaxVisibleValueCount(60);

    chart.setDrawGridBackground(false);
    chart.setScaleEnabled(false);

    String[] array = null;
    final ArrayList<String> xAxisLabel = new ArrayList<>();

    //X-Axis for 24hours data
    if (dayDataList != null && dayDataList.size() > 0) {
        //TODO : Static Array
        array = new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
                "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"};

        for (int i = 0; i <= dayDataList.size(); i++) {
            xAxisLabel.add(String.valueOf(i));
        }
    }
    //X-Axis for 7 days data
    else if (weekDataList != null && weekDataList.size() > 0) {
        //TODO : Static Array
        array = new String[]{"1", "2", "3", "4", "5", "6", "7"};

        for (int i = 1; i <= weekDataList.size(); i++) {
            xAxisLabel.add(String.valueOf(i));
        }
    }
    //X-Axis for 30 days data
    else if (monthDataList != null && monthDataList.size() > 0) {
        //TODO : Static Array
        array = new String[]{"2", "4", "6", "8", "10", "12", "14", "16", "18", "20", "22", "24", "26", "28", "30"};

        for (int i = 1; i <= monthDataList.size(); i++) {
            xAxisLabel.add(String.valueOf(i));
        }
    }


    //X-axis
    ValueFormatter xAxisFormatter = new DayAxisValueFormatter(chart, array);
    XAxis xAxis = chart.getXAxis();
    xAxis.setCenterAxisLabels(true);//To align Center
    xAxis.setGranularity(1f); // only intervals of 1 day
    xAxis.setGranularityEnabled(false); // To remove duplicate values
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setDrawGridLines(false);

    if (dayDataList != null && dayDataList.size() > 0) {
        xAxis.setLabelCount(dayDataList.size(), true);
    } else if (weekDataList != null && weekDataList.size() > 0) {
        xAxis.setLabelCount(weekDataList.size(), true);
    } else if (monthDataList != null && monthDataList.size() > 0) {
        xAxis.setLabelCount(monthDataList.size(), true);
    }

    xAxis.setValueFormatter(new IAxisValueFormatter() {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            Log.e("TAG_VALUE", " is " + (int) value);
            return xAxisLabel.get((int) value);
        }
    });


    //Left Side Y-axis
    ValueFormatter custom = new MyValueFormatter("$");
    YAxis leftAxis = chart.getAxisLeft();
    leftAxis.setLabelCount(8, false);
    leftAxis.setValueFormatter(custom);
    leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
    leftAxis.setSpaceTop(15f);
    leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)

    //Right side Y-axis
    YAxis rightAxis = chart.getAxisRight();
    rightAxis.setDrawGridLines(false);
    rightAxis.setLabelCount(8, false);
    rightAxis.setValueFormatter(custom);
    rightAxis.setSpaceTop(15f);
    rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)

    //To hide/Display Y axis labels
    rightAxis.setEnabled(false);
    leftAxis.setEnabled(false);

    Legend l = chart.getLegend();
    l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
    l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
    l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
    l.setDrawInside(false);
    l.setForm(Legend.LegendForm.SQUARE);
    l.setFormSize(9f);
    l.setTextSize(11f);
    l.setMaxSizePercent(1f);
    l.setXEntrySpace(4f);

    XYDataMarkerView mv = new XYDataMarkerView(getActivity(), xAxisFormatter);
    mv.setChartView(chart); // For bounds control
    chart.setMarker(mv); // Set the marker to the chart

    //Set Data
    setData();
    chart.setGridBackgroundColor(Color.rgb(234, 244, 255));//Set as a black
    chart.setDrawGridBackground(true);//set this to true to draw the grid background, false if not
    chart.invalidate();
}


private void setData() {

    List<BarEntry> yVals1 = new ArrayList<BarEntry>();
    List<BarEntry> yVals2 = new ArrayList<BarEntry>();


    ArrayList<BarEntry> values1 = new ArrayList<>();
    ArrayList<BarEntry> values2 = new ArrayList<>();

    if (dayDataList != null && dayDataList.size() > 0) {

        for (int i = 0; i < dayDataList.size(); i++) {
            values1.add(new BarEntry(i, (dayDataList.get(i).getDownloadedData()).floatValue()));
            values2.add(new BarEntry(i, (dayDataList.get(i).getUploadedData()).floatValue()));
        }

    } else if (weekDataList != null && weekDataList.size() > 0) {

        for (int i = 0; i < weekDataList.size(); i++) {
            values1.add(new BarEntry(i, (weekDataList.get(i).getAvdDownloadedData()).floatValue()));
            values2.add(new BarEntry(i, (weekDataList.get(i).getAvgUploadedData()).floatValue()));
        }

    } else if (monthDataList != null && monthDataList.size() > 0) {

        for (int i = 0; i < monthDataList.size(); i++) {
            values1.add(new BarEntry(i, (monthDataList.get(i).getAvdDownloadedData()).floatValue()));
            values2.add(new BarEntry(i, (monthDataList.get(i).getAvgUploadedData()).floatValue()));
        }

    }

    BarDataSet set1, set2;
    if (chart.getData() != null && chart.getData().getDataSetCount() > 0) {

        set1 = (BarDataSet) chart.getData().getDataSetByIndex(0);
        set2 = (BarDataSet) chart.getData().getDataSetByIndex(1);

        set1.setValues(values1);
        set2.setValues(values2);

        set1.setValues(yVals1);
        set2.setValues(yVals2);
        chart.getData().notifyDataChanged();
        chart.notifyDataSetChanged();

    } else {
        // create 2 DataSets
        set1 = new BarDataSet(values1, "Company A");
        set1.setColor(Color.rgb(104, 241, 175));
        set2 = new BarDataSet(values2, "Company B");
        set2.setColor(Color.rgb(164, 228, 251));
    }

    set1.setDrawIcons(false);
    set1.setDrawValues(false);//TODO: To hide/show text above bars

    set2.setDrawIcons(false);
    set2.setDrawValues(false);

    int startColor = ContextCompat.getColor(getActivity(), R.color.colorPrimary);
    int endColor = ContextCompat.getColor(getActivity(), R.color.colorPrimaryDark);
    set1.setGradientColor(startColor, endColor);

    int set2StartColor = ContextCompat.getColor(getActivity(), R.color.colorOrange);
    int set2EndColor = ContextCompat.getColor(getActivity(), R.color.colorRedWifi);
    set2.setGradientColor(set2StartColor, set2EndColor);

    BarData data = new BarData(set1, set2);
    data.setValueTextSize(10f);
    chart.getLegend().setEnabled(false);
    chart.setData(data);
    chart.setEnabled(true);

    float barSpace = 0.05f;
    float groupSpace = 0.1f;


    data.setBarWidth(0.42f);
    chart.groupBars(0, groupSpace, barSpace);
    chart.getXAxis().setAxisMinimum(0);
  /*  if (dayDataList != null && dayDataList.size() > 0) {
        chart.getXAxis().setAxisMaximum(dayDataList.size());
    } else if (weekDataList != null && weekDataList.size() > 0) {
        chart.getXAxis().setAxisMaximum(weekDataList.size());
    } else if (monthDataList != null && monthDataList.size() > 0) {
        chart.getXAxis().setAxisMaximum(monthDataList.size());
    }*/


 }



希望有人能解决我的问题,帮助我走出困境。提前谢谢。

您可以添加包含条形图对象的xml吗?另外,要使图表可滚动,请使用Chart.isDragEnabled=true,如果您希望无法进行所有交互,请使用Chart.isEnabled=true@RobertLaFondue还添加了xml。我尝试了
chart.setDragEnabled(true)
,但不幸的是它也不起作用。尝试删除此调用图表。setScaleEnabled(false);还有一个问题,你应该看看,里面的一切都解释得很好。谢谢@RobertLaFondue,我会查看上面的链接。我对单个条形图使用相同的库,该库工作正常,但在添加多个条形图后,该库出现问题。请添加包含条形图对象的xml,好吗?另外,要使图表可滚动,请使用Chart.isDragEnabled=true,如果您希望无法进行所有交互,请使用Chart.isEnabled=true@RobertLaFondue还添加了xml。我尝试了
chart.setDragEnabled(true)
,但不幸的是它也不起作用。尝试删除此调用图表。setScaleEnabled(false);还有一个问题,你应该看看,里面的一切都解释得很好。谢谢@RobertLaFondue,我会查看上面的链接。我使用同一个库来处理单个条,这很好,但在添加多个条后,这个库出现了问题。
 <?xml version="1.0" encoding="utf-8"?>
<com.github.mikephil.charting.charts.BarChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

  </RelativeLayout>