【问题标题】:How to display on top of Stackbar chart如何在堆积条形图顶部显示
【发布时间】:2016-04-05 05:09:04
【问题描述】:

我有一个 stackBar 图表。我想在条形图的顶部显示一个值,而不是在条形图的每个堆栈上显示一个值。我正在使用 MpAndroichart 库,默认情况下它会像第 1 周一样显示条形图。

我想在 bar 上显示第 1 周的值,而不是第 2 周的值。

【问题讨论】:

  • 你的代码在哪里?发布一些屏幕截图
  • 我用用例编辑了我的帖子。

标签: android mpandroidchart


【解决方案1】:

我今天也想弄清楚这一点,我用一个小技巧做到了。这就是我所做的:

private BarData generateBarData()
{
    ArrayList<String> xVals = new ArrayList<>();
    for(int i=0; i<mMonths.length; i++)
    {
        xVals.add(mMonths[i]);
    }

    ArrayList<BarEntry> yVals = new ArrayList<>();
    yVals.add(new BarEntry(new float[] {15, 5, 5}, 0));
    yVals.add(new BarEntry(new float[] {12, 2, 6}, 1));
    yVals.add(new BarEntry(new float[] {15, 3, 4}, 2));
    yVals.add(new BarEntry(new float[] {15, 5, 1}, 3));
    yVals.add(new BarEntry(new float[] {13, 4, 1}, 4));
    yVals.add(new BarEntry(new float[] {10, 2, 1}, 5));
    yVals.add(new BarEntry(new float[] {15, 10, 2}, 6));
    yVals.add(new BarEntry(new float[] {15, 2, 1}, 7));
    yVals.add(new BarEntry(new float[] {14, 3, 6}, 8));
    yVals.add(new BarEntry(new float[] {15, 7, 2}, 9));
    yVals.add(new BarEntry(new float[] {15, 3, 1}, 10));
    yVals.add(new BarEntry(new float[] {11, 2, 4}, 11));

    ValueFormatter custom = new MyBarValueFormatter(mContext);

    BarDataSet set = new BarDataSet(yVals, "Data Set");
    set.setBarSpacePercent(45f);
    set.setColors(getColors());

    set.setHighlightEnabled(false);
    set.setValueFormatter(custom);
    set.setDrawValues(true);

    BarData barData = new BarData(xVals, set);

    return barData;
}

private int[] getColors() {
    int[] colors = new int[3];
    colors[0] = getResources().getColor(R.color.barColor1);
    colors[1] = getResources().getColor(R.color.barColor2);
    colors[2] = getResources().getColor(R.color.barColor3);
    return colors;
}

在上面的代码中,我为 BarChart 生成了示例数据,并在 MyBarValueFormatter 类中完成了我的技巧,如下所示。

public class MyBarValueFormatter implements ValueFormatter {

    private DecimalFormat mFormat;
    private Context context;

    int toggle;
    float totalVal;

    public MyBarValueFormatter(Context context){
        toggle = 0;
        totalVal = 0;
        this.context = context;
        mFormat = new DecimalFormat("###,###,###,##0");
    }

    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {

        if(toggle % 3 == 0){
            toggle++;
            totalVal =  value;
            return "";
        }
        else if(toggle % 3 == 1){
            toggle++;
            totalVal =  totalVal + value;
            return "";
        }
        else{
            toggle++;
            totalVal = totalVal + value;
            return context.getResources().getString(R.string.rupee) + " " + mFormat.format(totalVal) + "000";
        }
    }
}

这不仅会显示堆叠条形图中的顶部值,还会显示条形图中所有堆叠值的总和。希望这会有所帮助!

【讨论】:

  • 非常感谢您的回答。很有帮助。
  • 在这种情况下,您应该接受@KomalGupta 的答案
【解决方案2】:
for (IDataSet set : mChart.getData().getDataSets()){
    set.setDrawValues(set.isDrawValuesEnabled());
}

使用它在条形顶部显示值。

【讨论】:

  • 实际上我所有条形图中所有值的总和是 100。每个堆栈代表 %value。但是在我的栏上,我希望显示一个不同的值,我从另一个属性中获取。说出总价。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
相关资源
最近更新 更多