Foz*_*efy 14 android bar-chart mpandroidchart
我使用MPAndroidChart创建了一个BarChart,我正在动态输入数据.这意味着我还需要动态确定Y轴.我的所有数据都表示为整数,但Y轴有时会将图例显示为带小数点1的十进制值.
我试图使用ValueFormatter来舍入值,但问题是有时Y值不在整数值位置(例如0.8,1.6,2.4等).因此,如果我只是将它们编辑为整数,则它们将不在正确的位置.
无论如何,我是否可以强制BarChart仅在Integer位置显示值?它可以跳过一些,实际上我希望它在值变大时.
编辑:当我说整数不在正确的位置时,我的意思是,一旦我修改了每个标签显示的内容,它们就不是'正确'.在我的例子中,我有5个条显示值3,4,2,3,2.第一个图像是'默认',第二个是我使用以下编辑值格式化程序后的图像:
myBarChart.getYLabels().setFormatter(new ValueFormatter()
{
@Override
public String getFormattedValue(float v)
{
return ((int) v)+"";
}
});
Run Code Online (Sandbox Code Playgroud)

正如我们从这些图像中看到的,我的整数值不是它们应该的位置(并且有两个'2').在这个例子中我除了显示值0,1,2,3,4.如果我有更多的数据,我希望它足够智能,只显示我有空间的值,所以例如,如果数据包含0-50的值,它将显示类似0,10,20,30 ,40,50或可能0,15,30,45等
Phi*_*oda 11
好吧,现在我看到了你的问题.的问题是,YAxis(YLabels)确定的每个标签之间的数字,因此步骤数自动.
不幸的是,目前无法自定义轴的计算方式或设置自定义标签.
我正在考虑将来添加这样一个功能,用户可以自定义哪些值作为轴标签绘制.
只是一个提示:
mEntries包含所有轴标签的数组是公共的.因此,一般情况下,您可以在创建后对其进行修改.但是,如果您手动修改轴,我绝对不确定轴的行为.
NoI*_*ull 10
环顾四周没有可用的解决方案后,我决定查看 javadoc 并发现了这种方法:setGranularity(float). 要强制 YAxis 始终显示整数(或您想要的任何间隔),您只需要调用它:
yAxisLeft.setGranularity(1.0f);
yAxisLeft.setGranularityEnabled(true); // Required to enable granularity
Run Code Online (Sandbox Code Playgroud)
但是,如果图表的最小值和最大值太接近,则图表将不会兑现setLabelCount(),除非强制 when (这将使标签再次变为十进制),因此您需要在设置数据后调用它:
private void calculateMinMax(BarLineChartBase chart, int labelCount) {
float maxValue = chart.getData().getYMax();
float minValue = chart.getData().getYMin();
if ((maxValue - minValue) < labelCount) {
float diff = labelCount - (maxValue - minValue);
maxValue = maxValue + diff;
chart.getAxisLeft().setAxisMaximum(maxValue);
chart.getAxisLeft().setAxisMinimum(minValue);
}
}
Run Code Online (Sandbox Code Playgroud)
就是这样!
很简单.你需要的只是两件事:
轴值格式化程序
mChart.getAxisLeft().setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value) {
return String.valueOf((int) Math.floor(value));
}
});
Run Code Online (Sandbox Code Playgroud)轴标签计数
int max = findMaxYValue(yourdata); // figure out the max value in your dataset
mChart.getAxisLeft().setLabelCount(max);
Run Code Online (Sandbox Code Playgroud)这就是我解决这个问题的方法.似乎y轴总是在最大值上绘制1(如果它不强制它).因此,将标签计数2设置为最大值(包括零和一个超过最大值),然后您需要做的就是使用轴格式化程序删除小数.如果所有y值都是整数,则无法确定它如何与十进制值一起使用.
barChart.getAxisLeft().setLabelCount(maxYvalue + 2, true);
barChart.getAxisLeft().setAxisMinValue(0f);
barChart.getAxisLeft().setAxisMaxValue(maxYvalue + 1);
YAxisValueFormatter customYaxisFormatter = new YAxisValueFormatter() {
@Override
public String getFormattedValue(float value, YAxis yAxis) {
return String.valueOf((int)value);
}
};
barChart.getAxisLeft().setValueFormatter(customYaxisFormatter);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11111 次 |
| 最近记录: |