首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setLabelCount(),导致标签混乱。MPandroid图表库

setLabelCount(),导致标签混乱。MPandroid图表库
EN

Stack Overflow用户
提问于 2018-07-04 03:24:42
回答 1查看 211关注 0票数 0

我正在使用MPAdroid绘制条形图,条形图前面有分组的条形图和标签。但是我得到的结果显示在下面的scrot中

上面的图表是chart1,下面的图表是chart2。现在,标签的实际顺序应该是TEMP-3、TEMP-1、BENTLER-1、BENTLER-2、ANNE-LOSE、ANNE-LOSE、BENTLER-1、BENTLER-2、ANNE-LOSE(从下到下)。但是你可以看到订单被搞乱了。其中TEMP-3(第一标签)被不必要地重复。而且,当我在日志中打印机器数组列表时,它与期望的输出相同。我已经在底部张贴了日志。

这就是我设置图表的方式。

代码语言:javascript
复制
       BarChart chart = (BarChart) findViewById(R.id.chart2);
       BarDataSet bds3 = new BarDataSet(percentage,"percentage");            
       BarData ddata = new BarData(bds3);
       float barWidth = 0.45f;
       ddata.setBarWidth(barWidth);
        chart.setScaleEnabled(true);
        chart.setPinchZoom(true);
        chart.setData(ddata);
        XAxis xa = chart.getXAxis();
        String[] mac = new String[machines.size()];
        for(int i=0;i<machines.size();++i)
        {
           mac[i] = machines.get(i);
           Log.i("Message5432",mac[i]);
        }
        xa.setValueFormatter(new MyAxisValueFormatter(mac));
        chart.fitScreen();
       xa.setLabelCount(machines.size()+1,true);
        xa.setCenterAxisLabels(true);

        xa.setGranularity(1f);
        xa.setGranularityEnabled(true);
        chart.setTouchEnabled(true);
        chart.setDragEnabled(true);
        chart.setScaleEnabled(true);
        chart.setVisibility(View.VISIBLE);
        chart.invalidate();


        BarDataSet bds2 = new BarDataSet(barEntries, "Target");

        BarChart chart1 = (BarChart) findViewById(R.id.chart1);
        BarDataSet bds1 = new BarDataSet(barEntries1,"Prepared");
        bds1.setColor(Color.parseColor("#F44336"));
        BarData ddata1 = new BarData(bds1,bds2);
        chart1.setScaleEnabled(true);
        chart1.setPinchZoom(true);
        chart1.setData(ddata1);
        XAxis xa1 = chart1.getXAxis();
        xa1.setValueFormatter(new MyAxisValueFormatter(mac));
        chart1.setTouchEnabled(true);
        chart1.setDragEnabled(true);
        chart1.setScaleEnabled(true);
        float groupSpace = 0.08f;
        float barSpace = 0.02f; 
        chart1.fitScreen();
        ddata1.setBarWidth(barWidth);
        xa1.setLabelCount(machines.size()+1,true);
        chart1.groupBars( -0.5f,groupSpace, barSpace);
        chart1.setFitBars(true);
        chart1.setVisibility(View.VISIBLE);
        xa1.setGranularity(1f);
        xa1.setGranularityEnabled(true);
        xa1.setCenterAxisLabels(true);
        chart1.invalidate();

我已经在machines ArrayList中打印了数据,我确信其中的数据没有错误。我不会发布下载数据并将其放入机器arrayList的代码。

这是我的MyAxisValueFormatter类。

代码语言:javascript
复制
  public class MyAxisValueFormatter implements IAxisValueFormatter
{
    String [] machines;
    public MyAxisValueFormatter(String[] arr)
    {
        this.machines = arr;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return machines[(int)value];
    }

    @Override
    public int getDecimalDigits() {
        return 0;
    }
}

这是我的OnCreate方法,(与图形相关的部分)

代码语言:javascript
复制
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_production_graphs);
        barEntries.clear();
        barEntries1.clear();
        percentage.clear();
        machines.clear();
        dta.clear();
        gblprpd.clear();

        BarChart chart = (BarChart) findViewById(R.id.chart2);
        chart.invalidate();
        chart.setVisibility(View.GONE);
        chart = (BarChart) findViewById(R.id.chart1);
        chart.invalidate();
        chart.setVisibility(View.GONE);
        // This portion calls an Aysnc task for Downloading files.
        try {
            new ProductionGraphs.FTPDownloader().execute();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

这些是我的日志。

代码语言:javascript
复制
07-04 19:28:48.185 10169-10169/com.example.quickstart I/Message5432: TEMP-3 
    TEMP-1 
    BENTLER-1 
    BENTLER-2 
    ANNE-LOSE 
    TEMP-3 
    BENTLER-1 
    BENTLER-2 
07-04 19:28:48.186 10169-10169/com.example.quickstart I/Message5432: ANNE-LOSE 

下面是设置条形值的方法

代码语言:javascript
复制
 int data = in.read();
                   s = "";
                   int commas = 0;
                   int max = 0;
                   int xa = 0, xa1 = 0,xa2=0;
                   while (data != -1) {

                       char ch = (char) data;
                       if (ch != ',')
                       {
                           s = s + ch;
                           data = in.read();
                           continue;
                       }
                       else
                           {
                           ++commas;
                           s = s + " ";

                           if (commas == 8) {
                               barEntries.add(new BarEntry(xa, Float.parseFloat(s)));
                               Log.i("FTP", s);
                               ++xa;
                           }
                           if (commas == 6) {
                               barEntries1.add(new BarEntry(xa1, Float.parseFloat(s)));
                               Log.i("FTP", s);
                               ++xa1;
                           }

                           if (commas == 4) {

                               machines.add(s);
                               Log.i("FTP", s);
                           }
                           gblprpd.add(s);
                           s = "";
                       }
                           data = in.read();

                           if (commas == 8) {
                               s = s + (char) data;
                               for (int i = 0; i < 5; ++i)
                                   s = s + (char) in.read();
                               s = s + " ";
                               percentage.add(new BarEntry(xa2,Float.parseFloat(s)));
                               ++xa2;
                               gblprpd.add(s);
                               s = "";
                               commas = 0;
                               data = in.read();
                           }
                       }

这是来自服务器的输入(值不同,但格式相同。)

我希望我已经给了你足够的信息来工作。请随时要求更多。提前感谢您的宝贵时间。

EN

回答 1

Stack Overflow用户

发布于 2018-07-04 15:52:46

发生这种情况是因为您必须指定要xAxis的标签的确切数量:

代码语言:javascript
复制
xa1.setLabelCount(barEntries.size());

另请参阅:https://stackoverflow.com/a/48116532/3101777

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51161665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档