【问题标题】:Plot Multiple Charts in one in MPAndroidChart在 MPAndroidChart 中将多个图表合二为一
【发布时间】:2015-01-08 12:09:37
【问题描述】:

我必须在一个图表中绘制两个不同的数据集。

数据集-1

    String[] xAxisOne = new String[] {
            "0", "1", "2", "3", "4", "5", "6"
    };

    float[] dataInput = {
            1f, 2f, 3f, 4f, 5f, 6f, 7f
    };

数据集-2

    String[] xAxisTwo = new String[] {
            "0", "2", "4", "5", "6", "8", "9"
    };

    float[] dataIn = {
            3f, 4f, 5f, 6f, 7f, 8f, 9f
    };

在上述数据中,DataSet-1 是创建图的引用。 DataSet-2 必须使用不同的 X 值集{xAxisTwo} 绘制在同一位置。

在现有实现中,前 6 个值 {dataInput} 被绘制,接下来的 6 个值 {dataIn} 参考xAxisOne 绘制,如何根据需要绘制.

【问题讨论】:

    标签: android android-canvas mpandroidchart


    【解决方案1】:

    您可以使用 LineChart 并统一 xAxis 并忽略每个数据集的“空”点来执行此操作。请看下面的代码:

    //float[] dataInput = {
    //      1f, 2f, 3f, 4f, 5f, 6f, 7f
    //};
    
    //values for datainput Dataset1 at your axisone positions
    ArrayList<Entry> dataset1 = new ArrayList<Entry>();
    dataset1.add(new Entry(1f, 0));
    dataset1.add(new Entry(2f, 1));
    dataset1.add(new Entry(3f, 2));
    dataset1.add(new Entry(4f, 3));
    dataset1.add(new Entry(5f, 4));
    dataset1.add(new Entry(6f, 5));
    dataset1.add(new Entry(7f, 6));
    
    //float[] dataIn = {
    //      3f, 4f, 5f, 6f, 7f, 8f, 9f
    //};
    
    //values for datainput Dataset2 at your axisone positions
    ArrayList<Entry> dataset2 = new ArrayList<Entry>();
    dataset2.add(new Entry(3f, 0));
    dataset2.add(new Entry(4f, 2));
    dataset2.add(new Entry(5f, 4));
    dataset2.add(new Entry(6f, 5));
    dataset2.add(new Entry(7f, 6));
    dataset2.add(new Entry(8f, 7));
    dataset2.add(new Entry(9f, 8));
    
    //String[] xAxisOne = new String[] {
    //      "0", "1", "2", "3", "4", "5", "6"
    //};
    
    ///String[] xAxisTwo = new String[] {
    ///     "0", "2", "4", "5", "6", "8", "9"
    ///};
    
    
    // Union from xAxisOne and xAxisTwo
    String[] xAxis = new String[] {"0", "1", "2", "3", "4", "5", "6", "8", "9"};
    
    
    ArrayList<LineDataSet> lines = new ArrayList<LineDataSet> ();
    
    LineDataSet lDataSet1 = new LineDataSet(dataset1, "DataSet1");
    lDataSet1.setColor(Color.RED);
    lDataSet1.setCircleColor(Color.RED);
    lines.add(lDataSet1);
    lines.add(new LineDataSet(dataset2, "DataSet2"));
    
    LineChart chart = (LineChart) getView().findViewById(R.id.chart);
    chart.setData(new LineData(xAxis, lines));
    

    最终结果将是:

    看起来 dataset1 的红线比蓝线多 2 个点。 如果 dataset1 只有这两个点(在位置 1 和 3),如下所示:

    ArrayList<Entry> dataset1 = new ArrayList<Entry>();
        dataset1.add(new Entry(2f, 1));
        dataset1.add(new Entry(4f, 3));
    

    这将是结果:

    【讨论】:

    • 收到问题varargs mismatch; String[] cannot be converted to ILineDataSet
    【解决方案2】:

    这需要从版本 3 开始更新:

    对于多行,您将需要多个数据集。假设您已经创建了两个数据集。

    LineDataSet dataSetReported = new LineDataSet(entriesReported, "Reported");
    LineDataSet dataSetCalculated = new LineDataSet(entriesCalculated, "Calculated");
    

    您将需要一个 ILINEDATASET 列表来容纳创建的两个数据集。只需创建一个列表并添加数据集。

    List<ILineDataSet> lines = new ArrayList<ILineDataSet>();
    lines.add(dataSetReported);
    lines.add(dataSetCalculated);
    

    在图表上显示为:

    LineData data = new LineData(lines);
    chart.setData(data);
    chart.invalidate();
    

    请参阅here 以获取原作者的文档。

    【讨论】:

      【解决方案3】:

      您可以使用此折线图传递多个数据集

      LineChart lineChart1 = (LineChart) findViewById(R.id.chart1);
      
          ArrayList<Entry> entries = new ArrayList<>();
          entries.add(new Entry(4f, 0));
          entries.add(new Entry(8f, 1));
          entries.add(new Entry(6f, 2));
          entries.add(new Entry(10f, 3));
          entries.add(new Entry(18f, 4));
          entries.add(new Entry(9f, 5));
      
          ArrayList<Entry> entry = new ArrayList<>();
          entry.add(new Entry(3f, 0));
          entry.add(new Entry(10f, 1));
          entry.add(new Entry(4f, 2));
          entry.add(new Entry(14f, 3));
          entry.add(new Entry(12f, 4));
          entry.add(new Entry(5f, 5));
          ArrayList<LineDataSet> lines = new ArrayList<LineDataSet> ();
          String[] xAxis = new String[] {"1", "2", "3", "4", "5","6"};
          LineDataSet lDataSet1 = new LineDataSet(entries, "DataSet1");
          lDataSet1.setDrawFilled(true);
          lines.add(lDataSet1);
      
          LineDataSet lDataSet2 = new LineDataSet(entry, "DataSet2");
          lDataSet2.setDrawFilled(true);
          lines.add(lDataSet2);
      
          lineChart1.setData(new LineData(xAxis, lines));
          lineChart1.animateY(5000);
      }
      

      【讨论】:

      • 可以用不同的填充颜色在一行上做吗?
      • @hpAndro set1.setColor(Color.RED);
      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2015-07-02
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多