隐藏值 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);
我有一个 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);