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));
}
}
}
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 .
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)
{.......}
}
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