android - scatter plot with dates at x axis -- add custom labels on X axis -
i want have scatter plot dates in x-axis.
because if use chartfactory.gettimechartview receive line graph , problem is:
i make plot current date x axis , data (user input) y axis.i store these data (date , user data) in lists , in file.
the user may enter multiple times data during day.and of data may same,so if use linegraph plot messes up.that's why need scatter.
1)how can this?
2) also, can point me example of adding custom labels on x axis,in order use linegraph?
----------------------update--------------------------------
i trying right (i know if done questions above though)
i store dates list string :
list<string> dates_asstring=new arraylist<string>(); i save them:
simpledateformat thedate = new simpledateformat("dd/mm/yyyy"); date d=new date(); string formatteddate=thedate.format(d); dates_asstring.add(formatteddate); bufferedwriter bw = new bufferedwriter(new outputstreamwriter(fos)); (int i=0;i<mydata.size();i++){ bw.write(mydata.get(i)+","+dates_asstring.get(i)+"\n");//+"\n"); in linegraph:
private static list<string> dates_asstring = new arraylist<string>(); private static list<double> data = new arraylist<double>(); private static list<date> dates_asdates = new arraylist<date>(); loadfunc(); //trying copy dates_asstring dates_asdates in order use them in timeseries simpledateformat formatter = new simpledateformat("dd/mm/yyyy"); date converteddate=new date(); try{ (int k=0;k<dates_asstring.size();k++){ converteddate = formatter.parse(dates_asstring.get(k)); date_asdates.add(converteddate); } }catch (parseexception e){ // todo auto-generated catch block e.printstacktrace(); } timeseries series = new timeseries("showing data"); (int i=0;i<date_asdates.size();i++){ series.add(date_asdates.get(i),data.get(i)); } mrenderer.setxlabels(0); (int i=0;i<dates_asstring.size();i++){ mrenderer.addxtextlabel(i,dates_asstring.get(i)); } public void loadfunc(){ simpledateformat thedate = new simpledateformat("dd/mm/yyyy"); date d=new date(); string formatteddate=thedate.format(d); bufferedreader br = new bufferedreader(new inputstreamreader(fis)); .... data.add(double.parsedouble(splitline[0])); dates_asstring.add(formatteddate);
as told dan in answer can use renderer.addxtextlabel(x, "text"); set x-axis labels.
in case:: u made mistake @ commented line , trying add x-axis labels twice..
change shown below
timeseries series = new timeseries("showing data"); (int i=0;i<date_asdates.size();i++){ series.add(i,data.get(i)); // change ll work u needed } update: change code following wont crash on adding new data's
and if u want points visible not linealong point change chartfactory.getlinechartintent(getbasecontext(), dataset, mrenderer,"dd/mm/yyyy"); chartfactory.getscatterchartintent(getbasecontext(), dataset, mrenderer,"dd/mm/yyyy");
mainactivity.java
package com.example.trying; import java.io.bufferedwriter; import java.io.file; // imports add before public class mainactivity extends activity implements onclicklistener{ view savebtn; view graphicsbtn; edittext value,weight; string filename = "mydata.csv"; public static list<string> dates_strings = new arraylist<string>(); public static list<double> data = new arraylist<double>(); public static list<date> date = new arraylist<date>(); list<double> mydata=new arraylist<double>(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); date.clear(); data.clear(); dates_strings.clear(); //set click listeners savebtn=(view) findviewbyid(r.id.savebtn); savebtn.setonclicklistener(this); graphicsbtn=(view) findviewbyid(r.id.graphicsbtn); graphicsbtn.setonclicklistener(this); value=(edittext) findviewbyid(r.id.enter_data); } //called when button clicked public void onclick(view v) { switch (v.getid()){ case r.id.savebtn: savefunc(); break; case r.id.graphicsbtn: intent = new intent(this,linegraph.class); startactivity(i); break; } } public void savefunc(){ simpledateformat thedate = new simpledateformat("dd/mm/yyyy"); date d=new date(); string formatteddate=thedate.format(d); log.d("tag","format"+formatteddate); dates_strings.add(formatteddate); try{ double thedata=double.parsedouble(value.gettext().tostring().trim()); mydata.add(thedata); log.d("tag","thedata :"+thedata); } catch (numberformatexception e){ string message="sorry did't type anything"; toast toast = toast.maketext(getbasecontext(), message,toast.length_short); toast.setgravity(gravity.center_horizontal | gravity.bottom, 0, 100); toast.show(); // toast.maketext(getbasecontext(), "sorry did't type anything", toast.length_short).show(); } file sdcard = environment.getexternalstoragedirectory(); file directory = new file (sdcard, "myfiles"); directory.mkdirs(); file file = new file(directory, filename); fileoutputstream fos; //saving them try { fos = new fileoutputstream(file); bufferedwriter bw = new bufferedwriter(new outputstreamwriter(fos)); (int i=0;i<mydata.size();i++){ bw.write(mydata.get(i)+","+dates_strings.get(i)+"\n"); } value.settext(""); bw.flush(); bw.close(); } catch (ioexception e2) { e2.printstacktrace(); }//catch } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } } linegraph.java
package com.example.trying; import java.io.bufferedreader; import java.io.file; // add other imports public class linegraph extends mainactivity { string filename = "mydata.csv"; private linearlayout layout; private graphicalview mchartview; protected void oncreate(bundle savedinstancestate){ super.oncreate(savedinstancestate); setcontentview(r.layout.graph); layout = (linearlayout) findviewbyid(r.id.chart); readfunc(); //trying copy dates_asstring date (dates) in order use them in timeseries simpledateformat formatter = new simpledateformat("dd/mm/yyyy"); date converteddate;//=new date(); try{ (int k=0;k<dates_strings.size();k++){ converteddate = formatter.parse(dates_strings.get(k)); date.add(converteddate); log.d("line","converteddate :"+converteddate); } }catch (parseexception e){ // todo auto-generated catch block e.printstacktrace(); } timeseries series = new timeseries("showing data"); (int i=0;i<dates_strings.size();i++){ series.add(i,data.get(i)); //series.add(date.get(i),data.get(i)); } xymultipleseriesdataset dataset=new xymultipleseriesdataset(); dataset.addseries(series); //renderer decay xyseriesrenderer renderer =new xyseriesrenderer(); renderer.setcolor(color.yellow); renderer.setlinewidth(3); renderer.setpointstyle(pointstyle.square); xymultipleseriesrenderer mrenderer =new xymultipleseriesrenderer(); mrenderer.addseriesrenderer(renderer); mrenderer.setxtitle("date"); mrenderer.setytitle("data"); mrenderer.setapplybackgroundcolor(true); mrenderer.setbackgroundcolor(color.black); mrenderer.setmarginscolor(color.black); mrenderer.setxroundedlabels(false); mrenderer.setshowcustomtextgrid(true); mrenderer.setxlabels(0); (int i=0;i<date.size();i++){ mrenderer.addxtextlabel(i,dates_strings.get(i)); } //mchartview = chartfactory.gettimechartview(this, dataset, mrenderer,"dd/mm/yyyy"); //mchartview = chartfactory.getscatterchartview(this, dataset, mrenderer); //layout.addview(mchartview); intent intent= chartfactory.getlinechartintent(getbasecontext(), dataset, mrenderer,"dd/mm/yyyy"); startactivity(intent); } public void readfunc(){ simpledateformat thedate = new simpledateformat("dd/mm/yyyy"); date d=new date(); string formatteddate=thedate.format(d); file sdcard = environment.getexternalstoragedirectory(); file directory = new file (sdcard, "myfiles"); file file = new file(directory, filename); string s; fileinputstream fis; try { fis = new fileinputstream(file); bufferedreader br = new bufferedreader(new inputstreamreader(fis)); { s = br.readline(); if (s != null ){ string[] splitline = s.split(","); data.add(double.parsedouble(splitline[0])); //dates_strings.add(thedate.parse(splitline[1])); dates_strings.add(formatteddate); } } while (s != null ); br.close(); } catch (ioexception e) { e.printstacktrace(); } } }
Comments
Post a Comment