【问题标题】:I am getting single bar chart on stacked Barchart which I am adding values dynamically.I need to get all bar charts我在堆叠条形图上获得单个条形图,我正在动态添加值。我需要获取所有条形图
【发布时间】:2018-03-12 15:31:02
【问题描述】:

我需要获取所有条,但我得到的是单个条(最后一个数组)。即使逻辑是正确的。我不知道请帮助我。提前致谢。我在谷歌搜索但我没有得到答案.

以下是完整代码的主要部分

初始化

              String empName[];
     int converted[], notconverted[], notcontacted[];

这里我让 Json 解析来自服务器的数据

            for (int i = 0; i < employees_array.length(); i++) {
                        empName = new String[employees_array.length()];
                        converted = new int[employees_array.length()];
                        notconverted = new int[employees_array.length()];
                        notcontacted = new int[employees_array.length()];
                        JSONObject empData = employees_array.getJSONObject(i);
                        empName[i] = empData.getString("EmployeeName");
                        empName[i].replace("-?\\d+.\\d+", " ");
                        if (empData.has("ConvertedActionCount")) {
                            converted[i] = employees_array.getJSONObject(i).getInt("ConvertedActionCount");
                        }
                        if (empData.has("NotConvertedActionCount")) {
                            notconverted[i] = employees_array.getJSONObject(i).getInt("NotConvertedActionCount");
                        }
                        if (empData.has("NotContactedActionCount")) {
                            notcontacted[i] = employees_array.getJSONObject(i).getInt("NotContactedActionCount");
                        }


                        Log.d("arraysize", converted[i] + "");
                        function_EMPChart(empArraysize, empName, converted, 
                    notconverted, notcontacted);

我正在将值传递给函数 Emp 图表方法

      private void function_EMPChart(int empArraysize, String[] s, int[] 
         converted, int[] notconverted, int[] notcontacted) {
    XAxis xl = msc_managerDashboard_empStats.getXAxis();
    xl.setPosition(XAxis.XAxisPosition.BOTTOM);

    xl.setDrawAxisLine(true);
    xl.setDrawGridLines(false);
    xl.setGranularity(10f);

    YAxis yl = msc_managerDashboard_empStats.getAxisLeft();

    yl.setDrawAxisLine(true);
    yl.setDrawGridLines(true);
    yl.setAxisMinimum(0f); // this replaces setStartAtZero(true)
    YAxis yr = msc_managerDashboard_empStats.getAxisRight();

    yr.setDrawAxisLine(true);
    yr.setDrawGridLines(false);
    yr.setAxisMinimum(0f);

    ArrayList<BarEntry> yVals = new ArrayList<BarEntry>();
    ArrayList<String> xVals = new ArrayList<>();
    xVals = new ArrayList<String>(Arrays.asList(s));
    msc_managerDashboard_empStats.setFitBars(true);


    for (int j = 0; j < s.length; j++) {
        Log.d("checklength", j + "");

        int value1 = converted[j];
        int value2 = notconverted[j];
        int value3 = notcontacted[j];
        Log.d("getvalue", value1 + " " + value2 + " " + value3);

        yVals.add(new BarEntry(j, new float[]{value1, value2, value3}));
        yVals.add(new BarEntry(4, new float[]{10.0f, 20.0f, 30.0f}));
        yVals.add(new BarEntry(5, new float[]{5.0f, 15.0f, 20.0f}));


        Log.d("checky", yVals.add(new BarEntry(j, new float[]{converted[j], notconverted[j], notcontacted[j]})) + "");

    }
    BarDataSet set1 = new BarDataSet(yVals, "");
    set1.setColors(getColors());
    ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
    dataSets.add(set1);
    BarData data = new BarData(dataSets);
    data.notifyDataChanged();

    msc_managerDashboard_empStats.setData(data);
    msc_managerDashboard_empStats.notifyDataSetChanged();
    msc_managerDashboard_empStats.invalidate();


    Log.d("yvalues", yVals + "");


    msc_managerDashboard_empStats.setFitBars(true);


}

【问题讨论】:

  • 没有,但在 MP 图表中,listview 中有多个图表。他使用相同的数据,但我想要不同的数据。这是链接github.com/JeffWangGithub/MPChartSample
  • 然后只需下载项目并在您的计算机上运行它并尝试使用它。
  • 我正在尝试但我不知道在适配器或活动中添加 Arraylist 的位置?

标签: android mpandroidchart stacked-chart


【解决方案1】:

我猜你正在使用this 库。 我不太了解您尝试完成的代码(我猜每个员工都有多个条形图)。 至少有什么问题,你在这个 for 循环 for (int i = 0; i &lt; employees_array.length(); i++) 中调用 setData,这意味着你每次都覆盖数据。 您应该在该 for 循环中创建一个 BarDataSet 列表并在最后设置数据。 您的主要问题是您每次都创建一组新数据。如果您保持相同的设置,您的代码也可能有效。在开始时定义一次dataSets 并继续添加您的集合。我的意思是这一行:

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

我猜你想要一个分组条形图,你可以在这里找到它:https://github.com/PhilJay/MPAndroidChart/wiki/Setting-Data#grouped-barchart

例子:

YourData[] group1 = ...;
YourData[] group2 = ...;

List<BarEntry> entriesGroup1 = new ArrayList<>();
List<BarEntry> entriesGroup2 = new ArrayList<>();

// fill the lists
for(int i = 0; i < group1.length; i++) {
    entriesGroup1.add(new BarEntry(i, group1.getValue()));
    entriesGroup2.add(new BarEntry(i, group2.getValue()));
}

BarDataSet set1 = new BarDataSet(entriesGroup1, "Group 1");
BarDataSet set2 = new BarDataSet(entriesGroup2, "Group 2");

BarData data = new BarData(set1, set2);
data.setBarWidth(barWidth); // set the width of each bar
barChart.setData(data);
barChart.groupBars(1980f, groupSpace, barSpace); // perform the "explicit" grouping
barChart.invalidate(); // refresh

【讨论】:

  • 它是一个堆积条形图。我正在尝试将数据存储在数组中并在其他方法中使用该数组
  • 是的,但是正如我所说的,该方法在 for 循环中并且执行 new ArrayList&lt;IBarDataSet&gt;(),这样您就可以覆盖以前的数据集,并且只使用 for 循环的最后一项。
猜你喜欢
  • 2023-01-31
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 2023-01-21
  • 1970-01-01
  • 2020-03-06
  • 2012-05-11
相关资源
最近更新 更多