Customizing achart engine XYMultipleSeriesRenderer display - android

I am currently working on an android application where I need to display linegraph. I choose achartengine and make XYMultipleSeriesRenderer with timeseries. I am using following code.
private void openChart(){
int count = 5;
Date[] dt = new Date[5];
for(int i=0;i<count;i++){
GregorianCalendar gc = new GregorianCalendar(2012, 10, i+1);
dt[i] = gc.getTime();
}
int[] visits = { 40,40,40,40,40};
int[] views = {55, 51, 44, 41, 39};
// Creating TimeSeries for Visits
TimeSeries visitsSeries = new TimeSeries("Theshold");
// Creating TimeSeries for Views
TimeSeries viewsSeries = new TimeSeries("Readings");
// Adding data to Visits and Views Series
for(int i=0;i<dt.length;i++){
visitsSeries.add(dt[i], visits[i]);
viewsSeries.add(dt[i],views[i]);
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Visits Series to the dataset
dataset.addSeries(visitsSeries);
// Adding Visits Series to dataset
dataset.addSeries(viewsSeries);
// Creating XYSeriesRenderer to customize visitsSeries
XYSeriesRenderer thresholdRenderer = new XYSeriesRenderer();
thresholdRenderer.setColor(Color.GREEN);
thresholdRenderer.setPointStyle(PointStyle.CIRCLE);
thresholdRenderer.setFillPoints(true);
thresholdRenderer.setLineWidth(2);
thresholdRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize viewsSeries
XYSeriesRenderer readingRenderer = new XYSeriesRenderer();
readingRenderer.setColor(Color.BLUE);
readingRenderer.setPointStyle(PointStyle.CIRCLE);
readingRenderer.setFillPoints(true);
readingRenderer.setLineWidth(2);
readingRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setLabelsTextSize(20);
multiRenderer.setXLabelsPadding(5);
multiRenderer.setYAxisMax(90);
multiRenderer.setYAxisMin(-20);
multiRenderer.setXTitle("Time Stamps");
multiRenderer.setYTitle("Temperature");
multiRenderer.setZoomButtonsVisible(true);
// Adding visitsRenderer and viewsRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(thresholdRenderer);
multiRenderer.addSeriesRenderer(readingRenderer);
// Getting a reference to LinearLayout of the MainActivity Layout
LinearLayout chartContainer = (LinearLayout) findViewById(R.id.chart_container);
// Creating a Time Chart
mChart = (GraphicalView) ChartFactory.getTimeChartView(getBaseContext(), dataset, multiRenderer,"dd-MMM-yyyy");
multiRenderer.setClickEnabled(true);
multiRenderer.setSelectableBuffer(10);
// Setting a click event listener for the graph
mChart.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Format formatter = new SimpleDateFormat("dd-MMM-yyyy");
SeriesSelection seriesSelection = mChart.getCurrentSeriesAndPoint();
if (seriesSelection != null) {
int seriesIndex = seriesSelection.getSeriesIndex();
String selectedSeries="Visits";
if(seriesIndex==0)
selectedSeries = "Visits";
else
selectedSeries = "Views";
// Getting the clicked Date ( x value )
long clickedDateSeconds = (long) seriesSelection.getXValue();
Date clickedDate = new Date(clickedDateSeconds);
String strDate = formatter.format(clickedDate);
// Getting the y value
int amount = (int) seriesSelection.getValue();
// Displaying Toast Message
Toast.makeText(
getBaseContext(),
selectedSeries + " on " + strDate + " : " + amount ,
Toast.LENGTH_SHORT).show();
}
}
});
// Adding the Line Chart to the LinearLayout
chartContainer.addView(mChart);
}
Using the above code I am able to generated following view
I am now stuck on the customizing the view. How can I remove the black background around the chart. And how can I increase the text size of legends and the xlabel and ylabel as well.
Using the setLabelsTextSize will only increase the size of the data in x and y axis (e.g. the date and the temperature value).
Thanks
Updated image:

To change the legend text size use multiRenderer.setLegendTextSize(). To change the outline background color use multiRenderer.setMarginsColor().
As a general note, customizations that involve the entire graph are probably going to be found as part of your XYMultipleSeriesRenderer. I recommend playing with the different settings and finding what each does.
ADDITIONAL
To increase the axes title size use multiRenderer.setAxesTitleSize(). As for the axes label colors use multiRenderer.setXLabelsColor() and multiRenderer.setYLabelsColor(). The axis color can be changed with multiRenderer.setAxesColor().
Again, I encourage you to play with the settings of the renderer. In your IDE, type multiRenderer. and all available methods will be shown. Scroll through those and you can probably find what you are looking. Most of the methods have clear descriptive names.

Change the color and font size use these code
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.rgb(130, 130, 230));
incomeRenderer.setChartValuesTextSize(15);
incomeRenderer.setDisplayChartValues(true);
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setChartTitle("Question vs Time Chart");
multiRenderer.setInScroll(true);
multiRenderer.setXTitle("Questions");
multiRenderer.setLabelsColor(Color.BLACK);
multiRenderer.setAxesColor(Color.BLACK);
multiRenderer.setXLabelsColor(Color.RED);
multiRenderer.setYLabelsColor(0, Color.RED);
multiRenderer.setLabelsTextSize(15);
multiRenderer.setYLabelsPadding(10);
multiRenderer.setZoomEnabled(false, false);
double[] set_pan=new double[]{-1.0,Double.MAX_VALUE,0.0,Double.MAX_VALUE+2};
multiRenderer.setPanLimits(set_pan);
multiRenderer.setPanEnabled(true, false);
multiRenderer.setLegendTextSize(15);
multiRenderer.setAxisTitleTextSize(18);
multiRenderer.setChartTitleTextSize(25);
multiRenderer.setTextTypeface("Arial", Typeface.BOLD);
multiRenderer.setMarginsColor(Color.WHITE);

Related

Android Chart not giving output

Following is my fragment used to display the graph on click of chart button. Right now it does not display any output. There is no error. I am using achartengine for the charts. Is there some error in the code or what? Please help.
public class VitalShow extends Fragment{
private Context mContext;
private EditText pn;
private Button chart,vaccine,presc;
private Database dbHelper;
private String val,data,dt,gen;
private View mChart;
private LinearLayout chartContainer;
//private double[] male1,male2,male3,male4,male5;
private String[] mMonth = new String[] {
"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24"
};
private int agemo;
#Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mContext = getActivity();
dbHelper=new Database(getActivity());
Bundle bundle=this.getArguments();
val=bundle.getString("val");
dt=bundle.getString("dt");
System.out.println(dt+"Date");
System.out.println(val+"Valuesss");
data=dbHelper.getVital(val);
gen=dbHelper.getGender(val);
String month=dt.substring(5,8);
String year=dt.substring(14);
System.out.println(month+"month"+year+"year");
System.out.println(gen+"Gender");
int mono = 0;
if(month.equals("Jan"))
mono = 1;
else if(month.equals("Feb"))
mono = 2;
else if(month.equals("Mar"))
mono = 3;
else if(month.equals("Apr"))
mono = 4;
else if(month.equals("May"))
mono = 5;
else if(month.equals("Jun"))
mono = 6;
else if(month.equals("Jul"))
mono = 7;
else if(month.equals("Aug"))
mono = 8;
else if(month.equals("Sep"))
mono = 9;
else if(month.equals("Oct"))
mono = 10;
else if(month.equals("Nov"))
mono = 11;
else if(month.equals("Dec"))
mono = 12;
System.out.println(mono+"mono");
int yrno=Integer.parseInt(year);
System.out.println(yrno+"yrno");
Calendar calendar = Calendar.getInstance();
int thisYear = calendar.get(Calendar.YEAR);
int thisMonth = calendar.get(Calendar.MONTH);
System.out.println(thisMonth+"thisyr");
agemo=((thisYear-yrno)*12)+(thisMonth-mono+1);
System.out.println(agemo+"Age");
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.vitalshow,null);
pn=(EditText)view.findViewById(R.id.editText1);
chart=(Button)view.findViewById(R.id.button1);
vaccine=(Button)view.findViewById(R.id.button2);
presc=(Button)view.findViewById(R.id.button3);
chartContainer = (LinearLayout)view.findViewById(R.id.chart);
pn.setText(data);
chart.setOnClickListener(new OnClickListener(){
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
pn.setVisibility(View.GONE);
chart.setVisibility(View.GONE);
vaccine.setVisibility(View.GONE);
presc.setVisibility(View.GONE);
openChart(gen);
}
});
vaccine.setOnClickListener(new OnClickListener(){
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(getActivity(), VaccAdmin.class);
String mon=String.valueOf(agemo);
intent.putExtra("age", mon);
startActivity(intent);
}
});
presc.setOnClickListener(new OnClickListener(){
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
Fragment fragment = new Prescription();
Bundle bundle=new Bundle();
bundle.putString("val", val);
System.out.println(val+"abc");
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
return view;
}
private void openChart(String gen){
String gender=gen;
System.out.println(gender);
int[] x = { 0,1,2,3,4,5,6,7, 8, 9, 10, 11,12,13,14,15,16,17,18,19,20,21,22,23,24 };
if(gender.equals("Male")){
double[] male1 = { 11.3,12.6,13.8, 14.4,14.7,14.8,14.9,14.9,
14.9,14.8,14.7,14.6,14.5,14.4,14.3,14.2,14.2,14.1,14.0,
13.9,13.9, 13.8, 13.8, 13.7,13.7};
double[] male2 = {12.2, 13.6, 14.9, 15.5,15.7,15.9,15.9,15.9,
15.9,15.8,15.7,15.6,15.5,15.4,15.3,15.2,15.1,15.0,
14.9,14.8, 14.8, 14.7, 14.6,14.6,14.5};
double[] male3 = {13.4, 14.9, 16.3,16.9,17.2,17.3,17.3,17.3,
17.3,17.2,17.0,16.9,16.8,16.7,16.6,16.4,16.3,16.2,16.1,
16.1,16.0, 15.9, 15.8, 15.8,15.7};
double[] male4 = {14.8,16.4,17.8,18.5,18.7,18.9,18.9,18.9,
18.8,18.7,18.6,18.4,18.3,18.1,18.0,17.9,17.8,17.6,17.5,
17.4,17.4, 17.3, 17.2, 17.1,17.1};
double[] male5 = {16.1,17.6,19.2,19.8,20.1,20.2,20.3,20.3,
20.2,20.1,19.9,19.8,19.6,19.5,19.3,19.2,19.1,18.9,18.8,
18.7,18.6,18.6,18.5,18.4,18.3};
double[] male6 = {15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,
15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,15.0,};
// Creating an XYSeries for Income
XYSeries m1 = new XYSeries("Male1");
// Creating an XYSeries for Expense
XYSeries m2 = new XYSeries("Male2");
// Adding data to Income and Expense Series
XYSeries m3 = new XYSeries("Male3");
XYSeries m4 = new XYSeries("Male4");
XYSeries m5 = new XYSeries("Male5");
XYSeries m6 = new XYSeries("You");
for(int i=0;i<x.length;i++){
m1.add(i,male1[i]);
m2.add(i,male2[i]);
m3.add(i,male3[i]);
m4.add(i,male4[i]);
m5.add(i,male5[i]);
//m6.add(i,male6[i]);
}
m6.add(20,15.0);
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(m1);
// Adding Expense Series to dataset
dataset.addSeries(m2);
dataset.addSeries(m3);
dataset.addSeries(m4);
dataset.addSeries(m5);
dataset.addSeries(m6);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.RED); //color of the graph set to cyan
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(2f);
incomeRenderer.setDisplayChartValues(true);
//setting chart value distance
incomeRenderer.setDisplayChartValuesDistance(10);
//setting line graph point style to circle
incomeRenderer.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
incomeRenderer.setStroke(BasicStroke.SOLID);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
expenseRenderer.setColor(Color.YELLOW);
expenseRenderer.setFillPoints(true);
expenseRenderer.setLineWidth(2f);
expenseRenderer.setDisplayChartValues(true);
//setting line graph point style to circle
expenseRenderer.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
expenseRenderer.setStroke(BasicStroke.SOLID);
XYSeriesRenderer Renderer3 = new XYSeriesRenderer();
Renderer3.setColor(Color.GREEN);
Renderer3.setFillPoints(true);
Renderer3.setLineWidth(2f);
Renderer3.setDisplayChartValues(true);
//setting line graph point style to circle
Renderer3.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
Renderer3.setStroke(BasicStroke.SOLID);
XYSeriesRenderer Renderer4 = new XYSeriesRenderer();
Renderer4.setColor(Color.YELLOW);
Renderer4.setFillPoints(true);
Renderer4.setLineWidth(2f);
Renderer4.setDisplayChartValues(true);
//setting line graph point style to circle
Renderer4.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
Renderer4.setStroke(BasicStroke.SOLID);
XYSeriesRenderer Renderer5 = new XYSeriesRenderer();
Renderer5.setColor(Color.RED);
Renderer5.setFillPoints(true);
Renderer5.setLineWidth(2f);
Renderer5.setDisplayChartValues(true);
//setting line graph point style to circle
Renderer5.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
Renderer5.setStroke(BasicStroke.SOLID);
XYSeriesRenderer Renderer6 = new XYSeriesRenderer();
Renderer6.setColor(Color.WHITE);
Renderer6.setFillPoints(true);
Renderer6.setLineWidth(2f);
Renderer6.setDisplayChartValues(true);
//setting line graph point style to circle
Renderer6.setPointStyle(PointStyle.SQUARE);
//setting stroke of the line chart to solid
Renderer6.setStroke(BasicStroke.SOLID);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setChartTitle("BMI Chart");
multiRenderer.setXTitle("Age in Months");
multiRenderer.setYTitle("BMI percentile");
/***
* Customizing graphs
*/
//setting text size of the title
multiRenderer.setChartTitleTextSize(28);
//setting text size of the axis title
multiRenderer.setAxisTitleTextSize(24);
//setting text size of the graph lable
multiRenderer.setLabelsTextSize(24);
//setting zoom buttons visiblity
multiRenderer.setZoomButtonsVisible(false);
//setting pan enablity which uses graph to move on both axis
multiRenderer.setPanEnabled(true, true);
//setting click false on graph
multiRenderer.setClickEnabled(false);
//setting zoom to false on both axis
multiRenderer.setZoomEnabled(true, true);
//setting lines to display on y axis
multiRenderer.setShowGridY(true);
//setting lines to display on x axis
multiRenderer.setShowGridX(true);
//setting legend to fit the screen size
multiRenderer.setFitLegend(true);
//setting displaying line on grid
multiRenderer.setShowGrid(true);
//setting zoom to false
multiRenderer.setZoomEnabled(true);
//setting external zoom functions to false
multiRenderer.setExternalZoomEnabled(true);
//setting displaying lines on graph to be formatted(like using graphics)
multiRenderer.setAntialiasing(true);
//setting to in scroll to false
multiRenderer.setInScroll(false);
//setting to set legend height of the graph
multiRenderer.setLegendHeight(30);
//setting x axis label align
multiRenderer.setXLabelsAlign(Align.CENTER);
//setting y axis label to align
multiRenderer.setYLabelsAlign(Align.LEFT);
multiRenderer.setXLabelsColor(Color.WHITE);
//setting text style
multiRenderer.setTextTypeface("sans_serif", Typeface.NORMAL);
//setting no of values to display in y axis
multiRenderer.setYLabels(10);
//multiRenderer.setYLabelsColor(10, Color.BLACK);
// setting y axis max value, Since i'm using static values inside the graph so i'm setting y max value to 4000.
// if you use dynamic values then get the max y value and set here
multiRenderer.setYAxisMax(20);
//setting used to move the graph on xaxiz to .5 to the right
multiRenderer.setXAxisMin(-0.5);
//setting used to move the graph on xaxiz to .5 to the right
multiRenderer.setXAxisMax(24);
//setting bar size or space between two bars
//multiRenderer.setBarSpacing(0.5);
//Setting background color of the graph to transparent
multiRenderer.setBackgroundColor(Color.BLACK);
//Setting margin color of the graph to transparent
//multiRenderer.setMarginsColor(getResources().getColor(R.color.transparent_background));
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setScale(2f);
//setting x axis point size
multiRenderer.setPointSize(4f);
multiRenderer.setXLabelsAngle(90);
//setting the margin size for the graph in the order top, left, bottom, right
multiRenderer.setMargins(new int[]{30, 30, 30, 30});
multiRenderer.setLabelsColor(Color.WHITE);
for(int i=0; i< x.length;i++){
multiRenderer.addXTextLabel(i, mMonth[i]);
}
// Adding incomeRenderer and expenseRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(incomeRenderer);
multiRenderer.addSeriesRenderer(expenseRenderer);
multiRenderer.addSeriesRenderer(Renderer3);
multiRenderer.addSeriesRenderer(Renderer4);
multiRenderer.addSeriesRenderer(Renderer5);
multiRenderer.addSeriesRenderer(Renderer6);
//this part is used to display graph on the xml
//LinearLayout chartContainer = (LinearLayout)findViewById(R.id.chart);
//remove any views before u paint the chart
chartContainer.removeAllViews();
//drawing bar chart
mChart = ChartFactory.getLineChartView(getActivity(), dataset, multiRenderer);
//adding the view to the linearlayout
chartContainer.addView(mChart,new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}
else {
double [] female1 = { 11.2, 12.1, 13.2, 13.7,14.0,14.2,14.3,14.3,
14.3,14.2,14.1,14.0,13.9,13.8,13.7,13.7,13.6,13.5,13.4,
13.4,13.3, 13.3, 13.3, 13.2,13.2};
double [] female2 = {12.1, 13.2, 14.3, 14.9,15.2,15.3,15.4,15.4,
15.4,15.3,15.2,15.1,15.0,14.8,14.7,14.6,14.6,14.5,
14.4,14.3, 14.3, 14.2, 14.2,14.2,14.1};
double [] female3 ={13.3, 14.6,15.8,16.4,16.7,16.8,16.9,16.9,16.8,
16.7,16.6,16.5,16.4,16.2,16.1,16.0,15.9,15.8,15.7,15.7,15.6,
15.5,15.5, 15.4, 15.4};
double [] female4 = {14.7, 16.1, 17.4, 18.0,18.3,18.5,18.6,18.6,
18.5,18.4,18.2,18.1,17.9,17.8,17.7,17.5,17.4,17.3,17.2,
17.2,17.1, 17.0, 17.0, 16.9,16.9};
double [] female5 = {15.9, 17.3, 18.8, 19.4,19.8,20.0,20.1,20.1,
20.0,19.9,19.7,19.6,19.4,19.2,19.1,19.0,18.8,18.7,18.6,
18.5,18.5, 18.4, 18.3, 18.3,18.2};
// Creating an XYSeries for Income
XYSeries m1 = new XYSeries("Female1");
// Creating an XYSeries for Expense
XYSeries m2 = new XYSeries("Female2");
// Adding data to Income and Expense Series
XYSeries m3 = new XYSeries("Female3");
XYSeries m4 = new XYSeries("Female4");
XYSeries m5 = new XYSeries("Female5");
XYSeries m6 = new XYSeries("You");
for(int i=0;i<x.length;i++){
m1.add(i,female1[i]);
m2.add(i,female2[i]);
m3.add(i,female3[i]);
m4.add(i,female4[i]);
m5.add(i,female5[i]);
}
m6.add(12,14.0);
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(m1);
// Adding Expense Series to dataset
dataset.addSeries(m2);
dataset.addSeries(m3);
dataset.addSeries(m4);
dataset.addSeries(m5);
dataset.addSeries(m6);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.RED); //color of the graph set to cyan
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(2f);
incomeRenderer.setDisplayChartValues(true);
//setting chart value distance
incomeRenderer.setDisplayChartValuesDistance(10);
//setting line graph point style to circle
incomeRenderer.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
incomeRenderer.setStroke(BasicStroke.SOLID);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
expenseRenderer.setColor(Color.YELLOW);
expenseRenderer.setFillPoints(true);
expenseRenderer.setLineWidth(2f);
expenseRenderer.setDisplayChartValues(true);
//setting line graph point style to circle
expenseRenderer.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
expenseRenderer.setStroke(BasicStroke.SOLID);
XYSeriesRenderer Renderer3 = new XYSeriesRenderer();
Renderer3.setColor(Color.GREEN);
Renderer3.setFillPoints(true);
Renderer3.setLineWidth(2f);
Renderer3.setDisplayChartValues(true);
//setting line graph point style to circle
Renderer3.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
Renderer3.setStroke(BasicStroke.SOLID);
XYSeriesRenderer Renderer4 = new XYSeriesRenderer();
Renderer4.setColor(Color.YELLOW);
Renderer4.setFillPoints(true);
Renderer4.setLineWidth(2f);
Renderer4.setDisplayChartValues(true);
//setting line graph point style to circle
Renderer4.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
Renderer4.setStroke(BasicStroke.SOLID);
XYSeriesRenderer Renderer5 = new XYSeriesRenderer();
Renderer5.setColor(Color.RED);
Renderer5.setFillPoints(true);
Renderer5.setLineWidth(2f);
Renderer5.setDisplayChartValues(true);
//setting line graph point style to circle
Renderer5.setPointStyle(PointStyle.CIRCLE);
//setting stroke of the line chart to solid
Renderer5.setStroke(BasicStroke.SOLID);
XYSeriesRenderer Renderer6 = new XYSeriesRenderer();
Renderer6.setColor(Color.WHITE);
Renderer6.setFillPoints(true);
Renderer6.setLineWidth(2f);
Renderer6.setDisplayChartValues(true);
//setting line graph point style to circle
Renderer6.setPointStyle(PointStyle.SQUARE);
//setting stroke of the line chart to solid
Renderer6.setStroke(BasicStroke.SOLID);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setChartTitle("BMI Chart");
multiRenderer.setXTitle("Age in Months");
multiRenderer.setYTitle("BMI percentile");
/***
* Customizing graphs
*/
//setting text size of the title
multiRenderer.setChartTitleTextSize(28);
//setting text size of the axis title
multiRenderer.setAxisTitleTextSize(24);
//setting text size of the graph lable
multiRenderer.setLabelsTextSize(24);
//setting zoom buttons visiblity
multiRenderer.setZoomButtonsVisible(false);
//setting pan enablity which uses graph to move on both axis
multiRenderer.setPanEnabled(true, true);
//setting click false on graph
multiRenderer.setClickEnabled(false);
//setting zoom to false on both axis
multiRenderer.setZoomEnabled(true, true);
//setting lines to display on y axis
multiRenderer.setShowGridY(true);
//setting lines to display on x axis
multiRenderer.setShowGridX(true);
//setting legend to fit the screen size
multiRenderer.setFitLegend(true);
//setting displaying line on grid
multiRenderer.setShowGrid(true);
//setting zoom to false
multiRenderer.setZoomEnabled(true);
//setting external zoom functions to false
multiRenderer.setExternalZoomEnabled(true);
//setting displaying lines on graph to be formatted(like using graphics)
multiRenderer.setAntialiasing(true);
//setting to in scroll to false
multiRenderer.setInScroll(false);
//setting to set legend height of the graph
multiRenderer.setLegendHeight(30);
//setting x axis label align
multiRenderer.setXLabelsAlign(Align.CENTER);
//setting y axis label to align
multiRenderer.setYLabelsAlign(Align.LEFT);
multiRenderer.setXLabelsColor(Color.WHITE);
//setting text style
multiRenderer.setTextTypeface("sans_serif", Typeface.NORMAL);
//setting no of values to display in y axis
multiRenderer.setYLabels(10);
//multiRenderer.setYLabelsColor(10, Color.BLACK);
// setting y axis max value, Since i'm using static values inside the graph so i'm setting y max value to 4000.
// if you use dynamic values then get the max y value and set here
multiRenderer.setYAxisMax(20);
//setting used to move the graph on xaxiz to .5 to the right
multiRenderer.setXAxisMin(-0.5);
//setting used to move the graph on xaxiz to .5 to the right
multiRenderer.setXAxisMax(24);
//setting bar size or space between two bars
//multiRenderer.setBarSpacing(0.5);
//Setting background color of the graph to transparent
multiRenderer.setBackgroundColor(Color.BLACK);
//Setting margin color of the graph to transparent
//multiRenderer.setMarginsColor(getResources().getColor(R.color.transparent_background));
//multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setScale(2f);
//setting x axis point size
multiRenderer.setPointSize(4f);
multiRenderer.setXLabelsAngle(90);
//setting the margin size for the graph in the order top, left, bottom, right
multiRenderer.setMargins(new int[]{30, 30, 30, 30});
multiRenderer.setLabelsColor(Color.WHITE);
for(int i=0; i< x.length;i++){
multiRenderer.addXTextLabel(i, mMonth[i]);
}
// Adding incomeRenderer and expenseRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(incomeRenderer);
multiRenderer.addSeriesRenderer(expenseRenderer);
multiRenderer.addSeriesRenderer(Renderer3);
multiRenderer.addSeriesRenderer(Renderer4);
multiRenderer.addSeriesRenderer(Renderer5);
multiRenderer.addSeriesRenderer(Renderer6);
//this part is used to display graph on the xml
//LinearLayout chartContainer = (LinearLayout)findViewById(R.id.chart);
//remove any views before u paint the chart
chartContainer.removeAllViews();
//drawing bar chart
mChart = ChartFactory.getLineChartView(getActivity(), dataset, multiRenderer);
//adding the view to the linearlayout
chartContainer.addView(mChart,new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}
}
}

AchartEngine Barchart Spacing not working when orientation is vertical and number of elements are 2

I am having a AchartEngine Barchart. I have only two bars to show with Orientation as Vertical. The space between the two bars is very high and I am not able to change it. I have tried the following
1. Change the values passed to setBarSpacing() method from -100, -10, -.9, -.5, -.1, 0, .1, .5, .9, 10, 100
2. Used two XYSeries and then one. In both cases, the space is significant
3. Increased and decreased width of Bar
4. Set the min, max and values at different ranges. min = .9, max = 2.1, x1 = 1, x2 = 2
Nothing is working. Can some one please help me with this?
Try the following method.
The method below adds a barchart showing data for two months with values. If you want to change the color and some other properties, you are free to do that.
private void createChart() {
String[] mMonth = new String[] { "Jan", "Feb" };
int[] mData = new int[] { 20, 25 };
// creating XY series for Data
XYSeries series = new XYSeries("Performance");
// fill the data
for (int i = 0; i < mMonth.length; i++) {
series.add(i, mData[i]);
}
// create a dataset to hold each data series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding dataseries to datast
dataset.addSeries(series);
// create a renderer to customize the series
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.GREEN);
renderer.setFillPoints(true);
renderer.setLineWidth(2);
renderer.setDisplayChartValues(true);
renderer.setChartValuesTextSize(30);
// create a renderer to customize entire chart
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setXLabels(0);
mRenderer.setXTitle("Quarter 1");
mRenderer.setYTitle("Values in K");
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setZoomButtonsVisible(false);
mRenderer.setZoomEnabled(false, false);
mRenderer.setPanEnabled(false, false);
// margins
int marginT = 50;
int marginL = 80;
int marginB = 15;
int marginR = 15;
mRenderer.setMargins(new int[] { marginT, marginL, marginB, marginR });
mRenderer.setShowLegend(false);
mRenderer.setAxisTitleTextSize(30);
// mRenderer.setChartTitleTextSize(20);
mRenderer.setLabelsTextSize(30);
mRenderer.setLegendTextSize(30);
// mRenderer.addXTextLabel(8, "OT");
mRenderer.setXAxisMin(-0.5);
mRenderer.setXAxisMax(3);
mRenderer.setYAxisMin(0);
mRenderer.setYLabelsAlign(Align.RIGHT);
mRenderer.setXLabelsColor(Color.BLACK);
mRenderer.setYLabelsColor(0, Color.BLACK);
mRenderer.setXLabels(0);
mRenderer.setBarSpacing(2);
// We want to avoid black border
// transparent margins
mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00));
for (int i = 0; i < mMonth.length; i++) {
mRenderer.addXTextLabel(i, mMonth[i]);
}
// adding renderer to multiple renderer(chart)
mRenderer.addSeriesRenderer(renderer);
GraphicalView view = ChartFactory.getBarChartView(this, dataset,
mRenderer, Type.STACKED);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.rlBarChart);
layout.addView(view, 0);
}
Hope this helps.

remove titles, labels, legends from achartengine Android

I am trying to draw a chart(like below image) using achart engine library in android.
DESIRED_CHART.png
Here is what i achieved
CURRENT_CHART.png
Code to draw this is as below
private void drawChart(){
int[] x = { 1,2,3,4,5,6,7,8 };
int[] happyness = { 5,2,4,1,0,4,5,0};
int[] energy = { 5,4,3,1,4,3,5,0};
int[] strenth = { 2,0,1,3,2,4,3,0};
int[] endurance = { 0,2,1,4,3,5,2,0};
// Creating an XYSeries for Income
XYSeries happynessSeries = new XYSeries("Happyness");
// Creating an XYSeries for Income
XYSeries energySeries = new XYSeries("Energy");
// Adding data to Income and Expense Series
XYSeries strenthSeries = new XYSeries("Strenth");
XYSeries enduranceSeries = new XYSeries("Endurance");
for(int i=0;i<x.length;i++){
happynessSeries.add(x[i], happyness[i]);
energySeries.add(x[i],energy[i]);
strenthSeries.add(x[i],strenth[i]);
enduranceSeries.add(x[i],endurance[i]);
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(happynessSeries);
// Adding Expense Series to dataset
dataset.addSeries(energySeries);
dataset.addSeries(strenthSeries);
dataset.addSeries(enduranceSeries);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer happynessRenderer = new XYSeriesRenderer();
happynessRenderer.setColor(Color.parseColor("#f4ed21"));//chart border color
happynessRenderer.setPointStyle(PointStyle.CIRCLE);
happynessRenderer.setFillPoints(true);
happynessRenderer.setLineWidth(2);
happynessRenderer.setDisplayChartValues(true);
happynessRenderer.setFillBelowLine(true);
happynessRenderer.setFillBelowLineColor(Color.parseColor("#bbf4ed21"));
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer energyRenderer = new XYSeriesRenderer();
energyRenderer.setColor(Color.parseColor("#20bff2"));
energyRenderer.setPointStyle(PointStyle.CIRCLE);
energyRenderer.setFillPoints(true);
energyRenderer.setLineWidth(2);
energyRenderer.setDisplayChartValues(true);
energyRenderer.setFillBelowLine(true);
energyRenderer.setFillBelowLineColor(Color.parseColor("#bb20bff2"));
// strenth
XYSeriesRenderer strenthRenderer = new XYSeriesRenderer();
strenthRenderer.setColor(Color.parseColor("#f97b1d"));
strenthRenderer.setPointStyle(PointStyle.CIRCLE);
strenthRenderer.setFillPoints(true);
strenthRenderer.setLineWidth(2);
strenthRenderer.setDisplayChartValues(true);
strenthRenderer.setFillBelowLine(true);
strenthRenderer.setFillBelowLineColor(Color.parseColor("#bbf97b1d"));
// endurance
XYSeriesRenderer enduranceRenderer = new XYSeriesRenderer();
enduranceRenderer.setColor(Color.parseColor("#c68c4d"));
enduranceRenderer.setPointStyle(PointStyle.CIRCLE);
enduranceRenderer.setFillPoints(true);
enduranceRenderer.setLineWidth(2);
enduranceRenderer.setDisplayChartValues(true);
enduranceRenderer.setFillBelowLine(true);
enduranceRenderer.setFillBelowLineColor(Color.parseColor("#bbc68c4d"));
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setZoomButtonsVisible(true);
for(int i=0;i<x.length;i++){
multiRenderer.addXTextLabel(i+1, mMonth[i]);
}
multiRenderer.setLabelsTextSize(50);
multiRenderer.setYLabels(0);
multiRenderer.setMargins(new int[]{0,0,0,0});
multiRenderer.addSeriesRenderer(happynessRenderer);
multiRenderer.addSeriesRenderer(energyRenderer);
multiRenderer.addSeriesRenderer(strenthRenderer);
multiRenderer.addSeriesRenderer(enduranceRenderer);
multiRenderer.setPanEnabled(false, false);
multiRenderer.setZoomEnabled(false, false);
multiRenderer.setZoomEnabled(false, false);
// Creating an intent to plot line chart using dataset and multipleRenderer
mChart =(GraphicalView) ChartFactory.getLineChartView(getBaseContext(), dataset, multiRenderer);
llChart.addView(mChart);
}
first and last x Axis points values (Mon feb 3 and Mon Feb 9) are cutting. I am struggling to show these values as DESIRED_CHART.png
How to remove this black background behind the Xaxis Values?
To change background color
multiRenderer.setMarginsColor(Color.GREEN);
and give margins to show whole x Axis points values text
multiRenderer.setMargins(new int[]{0,40,0,40});
To hide title
multiRenderer.setChartTitle("");
To hide legends
multiRenderer.setShowLegend(false);
where multiRenderer is XYMultipleSeriesRenderer .

Singleseries bar displaying multiple colors on the basis of given data in a Barchart uding achartengine lib

I am developing a Bar chart using achartengine lib, It has two single series.In which one series should show the same color always and other series show different colors as per the given values
E.g.:
<200 green color,200> x < 300 blue color >300 orange color
The code is below:`
public class ChartActivity extends Activity {
private String[] mMonth = new String[] {
"Jan", "Feb" , "Mar", "Apr", "May", "Jun",
"Jul", "Aug" , "Sep", "Oct", "Nov", "Dec"
};
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chart);
Button btnChart = (Button) findViewById(R.id.btn_chart);
// Defining click event listener for the button btn_chart
OnClickListener clickListener = new OnClickListener() {
#Override
public void onClick(View v) {
// Draw the Income vs Expense Chart
openChart();
}
};
btnChart.setOnClickListener(clickListener);
}
private void openChart(){
int[] x = { 0,1,2,3,4,5,6,7 };
int[] income = { 25,50,75,100,125,150,175};
int[] expense = {50, 75, 100, 125, 150, 175, 200, 225 };
// Creating an XYSeries for Income
XYSeries incomeSeries = new XYSeries("Income");
// Creating an XYSeries for Expense
XYSeries expenseSeries = new XYSeries("Expense");
// Adding data to Income and Expense Series
for(int i=0;i<x.length;i++){
incomeSeries.add(i,income[i]);
expenseSeries.add(i,expense[i]);
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(incomeSeries);
// Adding Expense Series to dataset
dataset.addSeries(expenseSeries);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.BLUE);
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(2);
incomeRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
expenseRenderer.setColor(Color.RED);
expenseRenderer.setFillPoints(true);
expenseRenderer.setLineWidth(2);
expenseRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setAxesColor(Color.BLACK);
multiRenderer.setXLabelsAlign(Align.RIGHT);
multiRenderer.setChartTitle("Income vs Expense Chart");
multiRenderer.setXTitle("Year 2012");
multiRenderer.setYTitle("Amount in Dollars");
multiRenderer.setBarSpacing(0.5);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMargins(new int[] {20, 30, 15, 0});
multiRenderer.setZoomButtonsVisible(true);
for(int i=0; i< x.length;i++){
multiRenderer.addXTextLabel(i, mMonth[i]);
}
// Adding incomeRenderer and expenseRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(incomeRenderer);
multiRenderer.addSeriesRenderer(expenseRenderer);
// Creating an intent to plot bar chart using dataset and multipleRenderer
Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, multiRenderer, Type.DEFAULT);
// Start Activity
startActivity(intent);
}`
for that I have developed the code written below:
Different colors for single series(or elements of same series) is not yet implemented or provided by the Achartengine library... :
But there are methods using multiple series or Stacked bar graph
Check Bar chart using achartengine thread. and Different color bars using multiple series .
UPDATE:
For stacke bar graph
suppose ur input data for which u want to use different color
int[] expense = {50, 75, 100, 125, 150, 175, 200, 225 };
declare different series as array list
static ArrayList<Integer> series1 = new ArrayList<Integer>();
static ArrayList<Integer> series2 = new ArrayList<Integer>();
static ArrayList<Integer> series3 = new ArrayList<Integer>();
now check data from input and add it to appropriate series
for(int i=0;i<expense.lenght;i++)
{
if(expense[i]> 50 & expense[i]<100)
{ series1.add(expense[i]);
series2.add(0);
series3.add(0);}
if(expense[i]> 100 & expense[i]<150)
{.......}
}

bar graph using AChartEngine library

I have a bar graph using AChartEngine library as shown below ::
public class MainActivity extends Activity {
private String[] mMonth = new String[] {
"Jan", "Feb" , "Mar", "Apr", "May", "Jun",
"Jul", "Aug" , "Sep", "Oct", "Nov", "Dec"
};
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Getting reference to the button btn_chart
Button btnChart = (Button) findViewById(R.id.btn_chart);
// Defining click event listener for the button btn_chart
OnClickListener clickListener = new OnClickListener() {
#Override
public void onClick(View v) {
// Draw the Income vs Expense Chart
openChart();
}
};
// Setting event click listener for the button btn_chart of the MainActivity layout
btnChart.setOnClickListener(clickListener);
}
private void openChart(){
int[] x = { 0,1,2,3,4,5,6,7 };
int[] income = { 2000,2500,2700,3000,2800,3500,3700,3800};
int[] expense = {2200, 2700, 2900, 2800, 2600, 3000, 3300, 3400 };
// Creating an XYSeries for Income
//CategorySeries incomeSeries = new CategorySeries("Income");
XYSeries incomeSeries = new XYSeries("Income");
// Creating an XYSeries for Income
XYSeries expenseSeries = new XYSeries("Expense");
// Adding data to Income and Expense Series
for(int i=0;i<x.length;i++){
incomeSeries.add(i,income[i]);
expenseSeries.add(i,expense[i]);
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(incomeSeries);
// Adding Expense Series to dataset
dataset.addSeries(expenseSeries);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.rgb(130, 130, 230));
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(2);
incomeRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
expenseRenderer.setColor(Color.rgb(220, 80, 80));
expenseRenderer.setFillPoints(true);
expenseRenderer.setLineWidth(2);
expenseRenderer.setDisplayChartValues(true);
Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setChartTitle("Income vs Expense Chart");
multiRenderer.setXTitle("Year 2012");
multiRenderer.setYTitle("Amount in Dollars");
multiRenderer.setZoomButtonsVisible(true);
for(int i=0; i< x.length;i++){
multiRenderer.addXTextLabel(i, mMonth[i]);
}
// Adding incomeRenderer and expenseRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(incomeRenderer);
multiRenderer.addSeriesRenderer(expenseRenderer);
// Creating an intent to plot bar chart using dataset and multipleRenderer
Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, multiRenderer, Type.DEFAULT);
// Start Activity
startActivity(intent);
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Above code graph looks like:
But i need to draw a graph with following property:
X-axis will have to display current time.as show in below graph time
is some where >2am
each bar in X-axis is 5 minutes bar
for every 5 minutes i send a data it should draw a bar based on
value.
for now ignore Y axis parameter just need how to plot required
X-aixs
The Graph some what looks like this:
i did something like this:: for static data
public class MainActivity extends Activity {
final Calendar c = Calendar.getInstance();
int mMinute = c.get(Calendar.MINUTE);
int mHour = c.get(Calendar.HOUR_OF_DAY);
int am =c.get(Calendar.AM_PM);
int[] x =new int[1920];
int[] sleep = {4,3,2,1,4,3,2,1,4,3,2,1,4,1,1,1,4,4,2,2,2,3,3,2,2,2,2,2,1,1,1,1,1,1,4,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2};
public String getnext(int a)
{
String ap;
if(am==1){ap="PM";}
else{ap="AM";}
String s= mHour+" "+ap;
mMinute=mMinute+5;
if (mHour >=12){
mHour=mHour-12;
switch(am){case 0:am=1; break; case 1:am=0;break;}
}
if(mMinute >= 60)
{
mHour= mHour+1;
mMinute=mMinute-60;
}
//Log.d("Gr","mMinute: "+mMinute);
if(mMinute==1 | mMinute==2 | mMinute==3 |mMinute==4 | mMinute==0)
{s= mHour+" "+ap;}
else{s="";}
return (s);}
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
openChart();
}
private void openChart(){
XYSeries sleepSeries = new XYSeries("Sleep");
for(int i=0;i<sleep.length;i++){
sleepSeries.add(i,sleep[i]);
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(sleepSeries);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer sleepRenderer = new XYSeriesRenderer();
sleepRenderer.setColor(Color.GREEN);
sleepRenderer.setFillPoints(true);
sleepRenderer.setLineWidth((float) .2);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setYAxisMin(0);
multiRenderer.setYLabels(0);
multiRenderer.setYAxisMax(4);
multiRenderer.setChartTitle("Sleep vs Time");
multiRenderer.setBarSpacing(.5);
//multiRenderer.setZoomButtonsVisible(true);
multiRenderer.setLegendHeight((int) 5);
multiRenderer.setPanEnabled(true, false);
multiRenderer.addSeriesRenderer(sleepRenderer);
// Creating an intent to plot bar chart using dataset and multipleRenderer
Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, renderer, Type.DEFAULT);
// Start Activity
startActivity(intent);
}
i got graph like
UPDATE:::
for real time data , update series like
static ArrayList<Integer> sleep = new ArrayList<Integer>();
as and when newval is available
sleep.add(newval);
then call openChart(); in that first clear dataset (dataset.clear();)
then call repaint();
You can keep Unix timestamps on the X axis and control the labels yourself. You can add custom X axis labels using:
renderer.addXTextLabel(x, "label");
A Unix timestamp is the value that the getTime() on a Date object returns. So you can add such values to your series:
series.add(date.getTime(), value);
Then, you can add custom labels for some of the values:
SimpleDateFormat format = new SimpleDateFormat("h a");
renderer.addXTextLabel(date.getTime(), format.format(date.getTime()));
I think for your requirement, Creating custom bar charts will make easy.Here is the example, you can develop with this example by simply using 5 arrays which you want to show on graph.
Bar Chart in Android With out any Built in jars
Just, go thorough the example and check it.
The main advantage is you need not use any predefined libraries for drawing charts. it will be possible with simple android UI like TextView and ListView

Categories

Resources