首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合图实时图

组合图实时图
EN

Stack Overflow用户
提问于 2017-08-02 16:12:30
回答 2查看 254关注 0票数 0

我对MPAndroidChart的实时组合图有个小问题。我有两个不同的图表,它工作在两个单一的图表,但我想合并为一个。主要问题是,当值传入时,图中没有任何内容。我明白了,推荐信没问题。

这是我的代码:

代码语言:javascript
复制
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);


    }
}

我想我写了一个很好的代码,但它不起作用。我尝试了很多方法来解决这个问题,但我做不到。我会很高兴什么时候相同的值可以出现在图形上。

希望有人能帮我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-03 14:28:21

所以,我花了更多的时间来了解mpandroid图表系统。首先,我用dataset创建了一个空的散列数据,用linedataset创建了一个空的行数据。在它之后,我必须在组合数据中查找这个图表,我从组合图表中得到了什么。

这是我的代码:

代码语言:javascript
复制
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);

    }
}

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

票数 0
EN

Stack Overflow用户

发布于 2018-10-19 02:31:11

试一试:

代码语言:javascript
复制
ILineDataSet dataSetGraphA = (ILineDataSet) data.getDataSetByIndex(0);
IScatterDataSet dataSetGraphB = (IScatterDataSet) data.getDataSetByIndex(1);

并以实际数据作为图表的开头:

代码语言:javascript
复制
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;
}

剩下的代码应该没问题。

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

https://stackoverflow.com/questions/45465955

复制
相关文章

相似问题

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