Как построить график между осью X в качестве даты и времени и Y в качестве значения - PullRequest
0 голосов
/ 03 июня 2019

У меня есть данные о значении датчика и формате даты и времени, которые были в формате (Год-месяц-датаТур: мин: секZ), например, значение «2019-05-29T12: 48: 18Z». Я хочу напечатать полученные значения из данных датчика и построить график в xaxis как datetime и yaxis в качестве значения. Я знаю, как изобразить в yaxis значение и как добавить xaxis lable, также помогите

Это был мой класс mobilefragment, где он начинает выполнять фоновый процесс, чтобы данные были взяты с сервера и отображены в мобильном фрагментном классе (где linechart находится в mobilefragmentactivity)

public class mobilefragment extends Fragment {
    public static TextView data;
    public static LineChart mchart;
    public static Button click;
    List<Entry> x;
    ArrayList<String> y;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.mobile, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mchart=view.findViewById(R.id.linechart);
        click=view.findViewById(R.id.button);
        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fetchdata process=new fetchdata();
                process.execute();

            }
        });
        //data=view.findViewById(R.id.fetcheddata);
    }
}

Это класс фонового процесса, и когда данные берутся с сервера после выполнения onpostextion, данные выводятся в виде активности мобильного фрагмента, а также я хочу получить формат даты и времени в xaxis, где он хранится в списке с именем 'y'

public class fetchdata extends AsyncTask<Void,Void,Void> {
    String data="";
    String dataparsed="";
    String singleparsed="";
    List<Entry> x;
    List<String> y;
    boolean flag=false;

    /*Context ctx;

    fetchdata(Context ctx) {
        this.ctx = ctx;
    }*/
    @Override
    protected Void doInBackground(Void... voids) {


        x = new ArrayList<Entry>();
        y = new ArrayList<String>();
        try {
            URL url=new URL("https://io.adafruit.com/api/v2/Yarev/feeds/pir-sensor/data");
            HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
            InputStream inputStream=httpURLConnection.getInputStream();
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
            String line="";
            while (line!=null)
            {
                line=bufferedReader.readLine();
                data=data+line;
            }
            JSONArray JA=new JSONArray(data);
            for(int i=0;i<JA.length();i++)
            {
                JSONObject JO= (JSONObject) JA.get(i);
                singleparsed="Value:"+JO.get("value")+"\n"+
                        "Feed key:"+JO.get("feed_key")+"\n"+
                        "Created:"+JO.get("created_at")+"\n";
                int value=JO.getInt("value");
                float v1=value;
                String time=JO.getString("created_at");
                x.add(new Entry(i,v1));
                y.add(time);  //time string
                dataparsed=dataparsed+singleparsed;
            }


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }


    @Override
    protected void onPostExecute(Void aVoid) {

        super.onPostExecute(aVoid);
        //mobilefragment.data.setText(this.dataparsed);

        mobilefragment.mchart.setDragEnabled(true);
        mobilefragment.mchart.setScaleEnabled(true);
        mobilefragment.mchart.setDrawGridBackground(false);
        mobilefragment.mchart.setTouchEnabled(true);
        mobilefragment.mchart.setPinchZoom(false);
        XAxis xl = mobilefragment.mchart.getXAxis();
        xl.setAvoidFirstLastClipping(true);
        YAxis leftAxis = mobilefragment.mchart.getAxisLeft();
        leftAxis.setInverted(false);
        YAxis rightAxis = mobilefragment.mchart.getAxisRight();
        rightAxis.setEnabled(false);
        Legend l = mobilefragment.mchart.getLegend();
        l.setForm(Legend.LegendForm.LINE);
        LineDataSet set1=new LineDataSet(x,"Data set 1");
        set1.setFillAlpha(110);
        set1.setValueTextColor(Color.GREEN);
        List<ILineDataSet> datasets= new ArrayList<>();
        datasets.add(set1);
        LineData data=new LineData(datasets);
        mobilefragment.mchart.setData(data);
        mobilefragment.mchart.invalidate();
        mobilefragment.click.setVisibility(View.INVISIBLE);
        //activity.startActivity(new Intent(activity, Main2Activity.class));


    }
    public List<Entry> getList() {
        return x;
    }

}

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Я предполагаю, что у вас есть список, который будет устанавливать данные на графике.Если да, то этот код поможет вам.Дайте мне знать, если вам что-нибудь понадобится ...

ArrayList<ILineDataSet>  lines = getLineDataSetAsPerGraphType(bookingLineList);


    XAxis x = lineChart.getXAxis();
    x.setDrawGridLines(false);
    x.setPosition(XAxis.XAxisPosition.BOTTOM);
    x.setTextColor(getResources().getColor(R.color.color_aeaeae));
    x.setTextSize(9);
    x.setLabelRotationAngle(-30f);
    x.setLabelsToSkip(0);

    YAxis yLabels1 = lineChart.getAxisRight();
    yLabels1.setEnabled(false);
    yLabels1.setDrawGridLines(false);

    String[] xAxis = new String[bookingLineList.size()];
    for (int i = 0; i < bookingLineList.size(); i++) {
        xAxis[i] = DateUtils.changeDateFormat("yyyy-MM-dd", "MMM dd", bookingLineList.get(i).getBooking_date());
    }

    lineChart.setData(new LineData(xAxis, lines));
    lineChart.setDragEnabled(true);

    lineChart.animateX(1000, Easing.EasingOption.EaseInOutQuart);

    // Scroll
    lineChart.canScrollHorizontally(5); // Scroll = true
    lineChart.setVisibleXRangeMaximum(10f); // Min Gap between two values
    lineChart.moveViewToX(0f); // Show from
0 голосов
/ 03 июня 2019

https://github.com/jjoe64/GraphView

Используя это вы можете достичь ваших требований

...