我正在使用MPAndroidChart(https://github.com/PhilJay/MPAndroidChart)。
我制作了一个条形图,但未显示xAxis-2nd值。
x,y:1周,3회
x,y:2周,0회
x,y:3周,0회
x,y:4周,0회
x,y:5周,0회
这些是我的参赛价值。但是像这样,第二个标签没有显示在我的手机中。
我附上了源码和结果截图。
ArrayList<BarEntry> entries = new ArrayList<>();
ArrayList<String> labels = new ArrayList<String>();
String[] labels2 = new String[ExRegList.length()];
try {
exerciseWholeCnt = ExRegList.length();
for (int i = 0; i < ExRegList.length(); i++) {
JSONObject obj = ExRegList.getJSONObject(i);
String week = obj.getString("WEEK");
int exCnt = obj.getInt("RESULT_COUNT");
labels.add(week + "주");
labels2[i] = week+"주";
entries.add(new BarEntry(i,exCnt));
}
} catch (Exception e) {
e.printStackTrace();
}
XAxis xAxis = barChart.getXAxis();
xAxis.setValueFormatter(new IndexAxisValueFormatter(labels2));
XAxis bottomAxis = barChart.getXAxis();
bottomAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
bottomAxis.setDrawLabels(true);
bottomAxis.setDrawGridLines(false);
bottomAxis.setDrawAxisLine(true);
YAxis left = barChart.getAxisLeft();
left.setAxisMinimum(0);
left.setAxisMaximum(7);
BarDataSet barDataSet = new BarDataSet(entries, "01");
BarData barData = new BarData(barDataSet);
YAxis rightYAxis = barChart.getAxisRight();
rightYAxis.setEnabled(false);
barChart.setData(barData);
barChart.setDescription(null);
barChart.setPinchZoom(false);
barChart.setScaleEnabled(false);
barChart.setDrawBarShadow(false);
barChart.setDrawGridBackground(false);
barChart.animateY(2000);
barChart.getLegend().setEnabled(false);
barChart.getData().setValueTextSize(10);
barChart.getBarData().setValueFormatter(new IValueFormatter() {
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
if (value != 0) {
DecimalFormat format = new DecimalFormat("#");
return format.format(value) + "회";
}
return "";
}
});
// barChart.getXAxis().setValueFormatter(new MyValueFormatter());
barChart.invalidate();
}
,结果是。
答案 0 :(得分:3)
最后,在查看了库的源代码后发现了问题。您应该拨打 setLabelCount 。在这一行之后:
XAxis bottomAxis = barChart.getXAxis();
将计数设置为X轴标签:
bottomAxis.setLabelCount(entries.size());
它会起作用。
<强>阐释:强> 基本上,默认标签计数为6(如果您不指定),并且它没有正确计算适当的标签。在您的情况下,您有5个项目,格式化程序获取值0,0.8,1.6,2.4,3.2和4.0-6值。并且该库的方法为第二个值提供“”值:
public String getFormattedValue(float value, AxisBase axis) {
int index = Math.round(value);
if (index < 0 || index >= mValueCount || index != (int)value)
return "";
return mValues[index];
}
这是图书馆的源代码,为您提供标签。在你的情况下,它在渲染第二个值时给出“”。
答案 1 :(得分:0)
从您的代码中我可以猜到代码/数据中存在运行时错误
try {
exerciseWholeCnt = ExRegList.length();
for (int i = 0; i < ExRegList.length(); i++) {
JSONObject obj = ExRegList.getJSONObject(i);
String week = obj.getString("WEEK");
int exCnt = obj.getInt("RESULT_COUNT");
labels.add(week + "주");
labels2[i] = week+"주";
entries.add(new BarEntry(i,exCnt));
}
你可以检查第二次循环是否完美,日志中没有任何东西
} catch (Exception e) {
**e.printStackTrace();**
}