隐藏值 MPAndroidChart 后居中图表 LineData

Center Chart LineData After Hide Values MPAndroidChart

我有一个 ArrayList<ILineDataSet> 可以在单击按钮时以编程方式 hide/show。

如何让剩余的值在图表上居中?

private void toggleDataSetVisibility(String label) {
    chart.invalidate();
    for (int i = 0; i < allDataSets.size(); i++) {
        if (label != null) {
            if (label.equals(allDataSets.get(i).getLabel())) {
                if (allDataSets.get(i).isVisible()) {
                    allDataSets.get(i).setVisible(false);
                    allDataSets.get(i).setDrawValues(false);
                } else {
                    allDataSets.get(i).setVisible(true);
                    allDataSets.get(i).setDrawValues(true);
                }
            }
        }
    }
    chart.getData().notifyDataChanged();
    chart.notifyDataSetChanged();
    chart.animateX(1500);
}

编辑: 图表呈现所有数据

点击后

btnT1.setOnClickListener((v) -> {
        toogleBtnPressed(v);
        toggleDataSetVisibility("T1");
    });



if (v.getId() == btnT1.getId()) {
        if (btnT1.isSelected()) {
            btnT1.setSelected(false);
        } else {
            btnT1.setSelected(true);
        }
    }

隐藏线数据值后:

关于这一点,我想刷新缩放并垂直居中保留的线数据

我找到的方法是

查找可见数据集:

 List<ILineDataSet> sets = chart.getData().getDataSets();
    List<ILineDataSet> visibleSets = new ArrayList<>();
    ILineDataSet dataset = sets.get(datasetIdx);

    dataset.setVisible(!dataset.isVisible());

    /**Rápida checagem para ver o tamanho do array que irá ser sorteado
     * Possibilidade de conflito com temperatura "0.0" ao colocar um valor 'nulo (0.0)' no array.
     *
     * Resgata sets visiveis para evitar processamento desnecessário.
     * */

    for (ILineDataSet mySet : sets) {
        if (mySet.isVisible())
            visibleSets.add(mySet);
    }

    float[] myArrayMin = new float[visibleSets.size()];
    float[] myArrayMax = new float[visibleSets.size()];

在那之后 运行 他们:

for (int i = 0; i < visibleSets.size(); i++) {
        LineDataSet set = (LineDataSet) visibleSets.get(i);
        float setYmin = Float.parseFloat(String.valueOf(set.getYMin()));
        float setYmax = Float.parseFloat(String.valueOf(set.getYMax()));
        myArrayMin[i] = setYmin;
        /**
         * O valor discrepante é feito para menos, mas quando ele existe ou há apenas ele
         * é necessário ajustá-lo para uma posição algumas casas maior [nesse caso 1015]
         * para que se obtenha uma boa visualização e ele não fique grudado no topo do chart
         * */
        if (setYmax == VALOR_DISCREPANTE)
            myArrayMax[i] = 1015;
        else
            myArrayMax[i] = setYmax;
    }

排序并找到最高值和最低值:

Arrays.sort(myArrayMin);
Arrays.sort(myArrayMax);
chart.getAxisLeft().setAxisMinimum(myArrayMin[0]);
chart.getAxisLeft().setAxisMaximum(myArrayMax[myArrayMax.length - 1]);

别忘了刷新图表:

 chart.invalidate();
 chart.getData().notifyDataChanged();
 chart.notifyDataSetChanged();
 chart.animateX(1500);