【问题标题】:MPAndroidChart grouped bar doesn't begin from left sideMPAndroidChart 分组栏不是从左侧开始
【发布时间】:2018-11-03 10:38:14
【问题描述】:

我正在使用最新版本的 MPAndroidChart。我正在尝试按照link 上的示例生成一个分组条形图,但没有成功。问题是xAxis。虽然我设置了 fromX = 0 ,但条形开始不适合左轴。它在左垂直线和第一个小节的开头之间有一个空格。

这是我的代码:

BarChart barChart = (BarChart) view.findViewById(R.id.chartDesgFam);
ArrayList<BarEntry> entries = new ArrayList<>();
entries.add(new BarEntry(0,4f));
entries.add(new BarEntry(1,8f));
entries.add(new BarEntry(2,6f));
entries.add(new BarEntry(3,12f));
entries.add(new BarEntry(4,18f));
entries.add(new BarEntry(5,9f));

ArrayList<BarEntry> entries2 = new ArrayList<>();
entries2.add(new BarEntry(0,5f));
entries2.add(new BarEntry(1,6f));
entries2.add(new BarEntry(2,12f));
entries2.add(new BarEntry(3,5f));
entries2.add(new BarEntry(4,14f));
entries2.add(new BarEntry(5,3f));

BarDataSet dataset = new BarDataSet(entries, "Serie 1");
dataset.setColor(Color.rgb(0, 0, 200));
BarDataSet dataset2 = new BarDataSet(entries2, "Serie 2");
dataset2.setColor(Color.rgb(200, 0, 0));

ArrayList<String> labels = new ArrayList<String>();
labels.add("January");
labels.add("February");
labels.add("March");
labels.add("April");
labels.add("May");
labels.add("June");

XAxis xAxis = barChart.getXAxis();
        xAxis.setSpaceMin(0f);
        xAxis.setDrawGridLines(false);
        xAxis.setDrawLabels(true);
        xAxis.setCenterAxisLabels(true);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setLabelCount(labels.size());
        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                if (value>=0) {
                    if (value < labels.size() ) return labels.get((int) value);
                    else return "";
                }
                return "";
            }
        });

ArrayList<IBarDataSet> dataSets = new ArrayList<>();
dataSets.add(dataset);
dataSets.add(dataset2);

BarData data = new BarData(dataSets);

float groupSpace = 0.06f;
float barSpace = 0.02f; // x2 dataset
float barWidth = 0.45f; // x2 dataset
data.setBarWidth(barWidth);

barChart.setData(data);
barChart.groupBars(0, groupSpace, barSpace);
barChart.setFitBars(true);
barChart.invalidate();

为了将第一个条调整到左侧,我需要在 fromX 参数中输入 -0.2f。我认为不是为了那个,但我不知道为什么它不是从左侧开始的。结果如下:

【问题讨论】:

  • 尝试使用 xAxis.setAxisMinimum() 和 barWidth 作为参数的一部分。看起来它需要移动 barWidth/2 左右。
  • 它不起作用。这是最糟糕的。如果我设置轴最小值,它会滑动标签并重复第一个。

标签: android charts


【解决方案1】:

请按照以下代码进行修复:

chart.getXAxis().setAxisMinimum(0);
chart.getXAxis().setAxisMaximum(0 + chart.getBarData().getGroupWidth(groupSpace, barSpace) * groupCount);

其中 groupCount 是您在数据集中拥有的条目总数。你可以这样理解:

data.getDataSetCount();

【讨论】:

  • 希望这可行。如果您需要了解其他信息,请告诉我。
  • 感谢您的帮助,但我不工作。正如我对@Gavin Wright 的回答,如果我更改 setAxisMinimun,我会安装左侧的条,但 X-labels 完全偏离中心并从分组的条中移位。而且,另一个问题是第一个标签是重复的。
  • 我终于明白了!!!。您的回答使我朝着正确的方向前进。经过大量尝试错误后,解决方案是 setAxisMinimum(0), setAxisMaximun(BarEntry1.size()+0.1f);感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2015-08-29
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2021-06-13
  • 1970-01-01
相关资源
最近更新 更多