首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XY散射AndroidPlot

XY散射AndroidPlot
EN

Stack Overflow用户
提问于 2014-07-22 17:08:25
回答 1查看 1K关注 0票数 1

试图使用AndroidPlot创建XY散点图,遇到了一个问题.图从左到右只画点,实质上是滚动图。

例如..。假设我有以下坐标,(0,1),(1,0),(0,-1),(-1,0)我希望看到一个菱形(如果所有的点都由一条线连接)

我以前已经成功地使用了AndroidPlot库,所以我对可用的方法有点熟悉。

是否有使用AndroidPlot库绘制散点图的示例?

希望我在这里讲得通..。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import pl.flex_it.androidplot.XYSeries;

import com.androidplot.series.XYSeries;
import com.androidplot.xy.BoundaryMode;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.xy.XYPlot;

import android.app.Fragment;
import android.graphics.Color;
import android.os.Bundle;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

    public class Temp extends Fragment {

        private static XYPlot xyPlot;
        private XYSeriesShimmer series;
        private LineAndPointFormatter series1Format;
        private ArrayList<Number> ALdata1, ALdata2;
        private int Adata1[], Adata2[];

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.fragment_test, container, false);

            // Import plot from the layout
            xyPlot = (XYPlot) rootView.findViewById(R.id.xyPlot);
            xyPlot.setDomainBoundaries(-2, 2, BoundaryMode.FIXED); // freeze the domain boundary:
            xyPlot.setRangeBoundaries(-2, 2, BoundaryMode.FIXED);

            ALdata1 = new ArrayList<Number>();
            ALdata2 = new ArrayList<Number>();
            ALdata1.clear();
            ALdata2.clear();

            Adata1 = new int[]{0,1,0,-1};
            Adata2 = new int[]{1,0,-1,0};

            series = new XYSeriesShimmer(ALdata1, ALdata2, 0, "Sightings in USA");
            series1Format = new LineAndPointFormatter(Color.TRANSPARENT, Color.BLACK, null); // line color, point color, fill color
            xyPlot.addSeries(series, series1Format);

            plotDataMethod();

            return rootView;
        }

        private void plotDataMethod() {

            for(int i=0; i<Adata1.length; i++){
                ALdata1.add(Adata1[i]);
                ALdata2.add(Adata2[i]);

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                series.updateData(ALdata1, ALdata2);
                xyPlot.redraw();
            }

        }

    }

编辑:

代码语言:javascript
复制
package pl.flex_it.androidplot;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.androidplot.series.XYSeries;

public class XYSeriesShimmer implements XYSeries {
    private List<Number> dataX;
    private List<Number> dataY;
    private int seriesIndex;
    private String title;

    public XYSeriesShimmer(List<Number> datasource, int seriesIndex, String title) {
        this.dataY = datasource;
        this.seriesIndex = seriesIndex;
        this.title = title;
    }

    public XYSeriesShimmer(List<Number> datasourceX, List<Number> datasourceY, int seriesIndex, String title) {
        this.dataX = datasourceX;
        this.dataY = datasourceY;
        this.seriesIndex = seriesIndex;
        this.title = title;
    }

    @Override
    public String getTitle() {
        return title;
    }

    @Override
    public int size() {
        return dataY.size();
    }

    @Override
    public Number getY(int index) {
        return dataY.get(index);
    }

    @Override
    public Number getX(int index) {
        return index;
    }

    public void updateData(List<Number> datasourceX){ //dont need to use this cause, the reference is only stored, modifying the datasource externally will cause this to be updated as well
        this.dataY=datasourceX;
    }

    public void updateData(List<Number> datasourceX, List<Number> datasourceY){ //dont need to use this cause, the reference is only stored, modifying the datasource externally will cause this to be updated as well
        this.dataX=datasourceX;
        this.dataY=datasourceY;
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-24 16:00:18

这看起来可能是问题所在-在XYSeriesShimmer中:

代码语言:javascript
复制
@Override
public Number getX(int index) {
    return index;
}

这总是会返回i,这意味着每个元素的x值都比您正在经历的previous...exactly大1。尝试将其更改为:

代码语言:javascript
复制
@Override
public Number getX(int index) {
    return dataX.get(i);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24893567

复制
相关文章

相似问题

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