代码之家  ›  专栏  ›  技术社区  ›  Birek

组合图实时图

  •  0
  • Birek  · 技术社区  · 7 年前

    我对实时组合图表有点问题 MPAndroidChart

    这是我的代码:

    private void IntialcombinedChart(){
        mChart = (CombinedChart) findViewById(R.id.chartFetalandToco);
    
        mChart.setDescription("");
        mChart.setNoDataText("No data yet");
        mChart.setDrawGridBackground(false);
    
        mChart.setTouchEnabled(true);
        mChart.setDragEnabled(true);
        mChart.setScaleEnabled(true);
        mChart.setDrawGridBackground(false);
    
        mChart.setVisibleXRangeMaximum((float)10);
    
        XAxis x1 = mChart.getXAxis();
        x1.setDrawGridLines(false);
        x1.setAxisMaxValue(1200);
        x1.setAvoidFirstLastClipping(true);
    
        YAxis y1 = mChart.getAxisLeft();
        y1.setAxisMaxValue(255);
        y1.setAxisMinValue(0);
        y1.setDrawGridLines(true);
    
    
        YAxis y12 = mChart.getAxisRight();
        y12.setEnabled(false);
    
    
        cData = new CombinedData();
    
        cData.setData(new LineData());
        cData.setData(new ScatterData());
        mChart.setData(cData);
        mChart.invalidate();
    }
    
    
    
    public ScatterDataSet createFetalSet(){
        ScatterDataSet set = new ScatterDataSet(null,"Fetal");
        set.setScatterShapeSize(7.5f);
        set.setDrawValues(false);
        set.setValueTextSize(10f);
        set.setDrawValues(false);
        set.setColor(ColorTemplate.COLORFUL_COLORS[2]);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        return  set;
    }
     private LineDataSet createTocoSet(){
        LineDataSet set = new LineDataSet(null,"Toco");
        set.setDrawCircles(false);
        set.setDrawCubic(true);
        set.setDrawValues(false);
        set.setColor(ColorTemplate.COLORFUL_COLORS[3]);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        return  set;
    
    
    }
    
     public void AddFetalEntry(float sinValue){
        CombinedData data = mChart.getData();
        if (data != null) {
            LineDataSet dataSetGraphA = (LineDataSet) data.getDataSetByIndex(0);
            ScatterDataSet dataSetGraphB = (ScatterDataSet) data.getDataSetByIndex(1);
    
            if (dataSetGraphA == null) {
                dataSetGraphA = createTocoSet();
                data.addDataSet(dataSetGraphA);
            }
            if (dataSetGraphB == null) {
                dataSetGraphB = createFetalSet();
                data.addDataSet(dataSetGraphB);
            }
    
            data.addXValue("");
    
            data.addEntry(new Entry(sinValue, dataSetGraphA.getEntryCount()), 0);
    
            data.addEntry(new Entry(sinValue, dataSetGraphB.getEntryCount()), 1);
    
            data.notifyDataChanged();
    
    
            // let the chart know it's data has changed
            mChart.notifyDataSetChanged();
            mChart.invalidate(); // refresh
    
            mChart.setVisibleXRangeMaximum(2000);
    
            //int valueCount = data.getXValCount();
            mChart.moveViewToX(data.getXValCount() - 2000);
    
    
        }
    }
    

    我希望有人能帮我。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Birek    7 年前

    所以,我花了更多的时间来理解mpandroid图表系统。首先,我用dataset创建了一个空的scatterlinedata,用linedataset创建了一个空的linedata。之后,我不得不在combineddata中查找这些图表数据,这是我从combineddata中得到的。

    这是我的代码:

    private void IntialcombinedChart(){
        mChart = (CombinedChart) findViewById(R.id.chartFetalandToco);
    
        mChart.setDescription("");
        mChart.setNoDataText("No data yet");
        mChart.setDrawGridBackground(false);
        mChart.setTouchEnabled(true);
        mChart.setDragEnabled(true);
        mChart.setScaleEnabled(true);
        mChart.setDrawGridBackground(false);
        mChart.setVisibleXRangeMaximum((float)10);
    
        XAxis x1 = mChart.getXAxis();
        x1.setDrawGridLines(false);
        x1.setAxisMaxValue(1200);
        x1.setAvoidFirstLastClipping(true);
    
    
        YAxis y1 = mChart.getAxisLeft();
        y1.setAxisMaxValue(255);
        y1.setAxisMinValue(0);
        y1.setDrawGridLines(true);
    
    
        YAxis y12 = mChart.getAxisRight();
        y12.setEnabled(false);
    
        mChart.getLegend().setEnabled(false);
    
        cData = new CombinedData();
    
        cData.setData(generateLineData());
        cData.setData(generateScatterData());
        mChart.setData(cData);
        mChart.invalidate();
    
    
    
    
    }
    protected ScatterData generateScatterData() {
    
        ScatterData d = new ScatterData();
    
    
        d.addDataSet(createFetalSet());
    
        return d;
    }
    
    private LineData generateLineData() {
        LineData d = new LineData();
        d.addDataSet(createTocoSet());
        return d;
    }
    public ScatterDataSet createFetalSet(){
        ScatterDataSet set = new ScatterDataSet(null,"Fetal");
        set.setScatterShapeSize(10f);
        set.setDrawValues(true);
        set.setValueTextSize(10f);
        set.setDrawValues(false);
        set.setColor(ColorTemplate.COLORFUL_COLORS[2]);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        return  set;
    }
    
    private LineDataSet createTocoSet(){
        LineDataSet set = new LineDataSet(null,"Toco");
        set.setDrawCircles(false);
        set.setDrawCubic(true);
        set.setDrawValues(false);
        set.setColor(ColorTemplate.COLORFUL_COLORS[3]);
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        return  set;
    
    
    }
    public void AddFetalEntry(float sinValue){
        fmDetected ++;
        CombinedData data = mChart.getData();
        if (data != null) {
    
    
            ScatterData scatterDataData = data.getScatterData();
            if(scatterDataData != null){
    
                ScatterDataSet set = (ScatterDataSet) data.getDataSetByIndex(1);
                if (set == null) {
    
                    set = createFetalSet();
                    data.addDataSet(set);
                }
                scatterDataData.addXValue("");
                LineData tocoData = data.getLineData();
                if(tocoData != null) {
    
                    LineDataSet pakk = (LineDataSet) data.getDataSetByIndex(0);
    
                    scatterDataData.addEntry(new Entry(sinValue,pakk.getEntryCount()-1), 0);
                }
                mChart.notifyDataSetChanged();
                mChart.invalidate();
            }
            data.addXValue("");
            data.notifyDataChanged();
    
    
            // let the chart know it's data has changed
            mChart.notifyDataSetChanged();
            mChart.invalidate();
            mChart.setVisibleXRangeMaximum(1200);
    
    
    
    
            //int valueCount = data.getXValCount();
            mChart.moveViewToX(data.getXValCount() - 7);
        }
    }
    public void AddTocoEntry(float sinValue){
        CombinedData data = mChart.getData();
        if (data != null) {
    
    
            LineData tocoData = data.getLineData();
            if(tocoData != null){
    
                LineDataSet set = (LineDataSet) data.getDataSetByIndex(0);
                if (set == null) {
    
                    set = createTocoSet();
                    data.addDataSet(set);
                }
                tocoData.addXValue("");
                tocoData.addEntry(new Entry(sinValue,set.getEntryCount()),0);
    
                mChart.notifyDataSetChanged();
                mChart.invalidate();
            }
            data.addXValue("");
            data.notifyDataChanged();
    
    
            // let the chart know it's data has changed
            mChart.notifyDataSetChanged();
            mChart.invalidate();
            mChart.setVisibleXRangeMaximum(1200);
    
    
    
    
            //int valueCount = data.getXValCount();
            mChart.moveViewToX(data.getXValCount() - 7);
    
        }
    }
    

    如果有人能帮助我,我的代码看起来更好,我将非常感激。:)

        2
  •  0
  •   Mjho Nguyen    6 年前

    ILineDataSet dataSetGraphA = (ILineDataSet) data.getDataSetByIndex(0);
    IScatterDataSet dataSetGraphB = (IScatterDataSet) data.getDataSetByIndex(1);
    

    并用实际数据初始化图形:

    cData = new CombinedData();
    
    cData.setData(generateLineData());
    cData.setData(generateScatterData());
    mChart.setData(cData);
    
    private ScatterData generateScatterData() {
    
        ScatterData d = new ScatterData();
    
        ArrayList<Entry> entries = new ArrayList<Entry>();
    
        for (int index = 0; index < 3; index++)
            entries.add(new Entry(getRandom(20, 15), index));
    
        ScatterDataSet set = new ScatterDataSet(entries, "Scatter DataSet");
        set.setColor(Color.GREEN);
        set.setScatterShapeSize(7.5f);
        set.setDrawValues(false);
        set.setValueTextSize(10f);
        d.addDataSet(set);
    
        return d;
    }
    
    private LineData generateLineData() {
    
        LineData d = new LineData();
    
        ArrayList<Entry> entries = new ArrayList<Entry>();
    
        for (int index = 0; index < 3; index++)
            entries.add(new Entry(index + 0.5f, getRandom(15, 5)));
    
        LineDataSet set = new LineDataSet(entries, "Line DataSet");
        set.setColor(Color.rgb(240, 238, 70));
        set.setLineWidth(2.5f);
        set.setCircleColor(Color.rgb(240, 238, 70));
        set.setCircleRadius(5f);
        set.setFillColor(Color.rgb(240, 238, 70));
        set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        set.setDrawValues(true);
        set.setValueTextSize(10f);
        set.setValueTextColor(Color.rgb(240, 238, 70));
    
        set.setAxisDependency(YAxis.AxisDependency.LEFT);
        d.addDataSet(set);
    
        return d;
    }