我对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);
}
}我想我写了一个很好的代码,但它不起作用。我尝试了很多方法来解决这个问题,但我做不到。我会很高兴什么时候相同的值可以出现在图形上。
希望有人能帮我。
发布于 2017-08-03 14:28:21
所以,我花了更多的时间来了解mpandroid图表系统。首先,我用dataset创建了一个空的散列数据,用linedataset创建了一个空的行数据。在它之后,我必须在组合数据中查找这个图表,我从组合图表中得到了什么。
这是我的代码:
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);
}
}如果有人能帮我,我的代码看起来更好,我将非常感激。:)
发布于 2018-10-19 02:31:11
试一试:
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;
}剩下的代码应该没问题。
https://stackoverflow.com/questions/45465955
复制相似问题