achartengine multiple lines in one linegraph - android

I am trying to make two lines appear in a graph according to this video:
http://www.youtube.com/watch?v=5DGldVzC-bU
My code:
public class LineGraph {
public Intent getIntent(Context context){
int[] x = {1,2,3,4,5,6,7,8,9,10};
int[] y = {31,29,54,94,75,36,47,118,92,10};
TimeSeries series = new TimeSeries("Line1");
for (int i=0;i<x.length;i++){
series.add(x[i],y[i]);
}
int[] x2 = {1,2,3,4,5,6,7,8,9,10};
int[] y2 = {39,145,35,87,2,65,48,49,100,106};
TimeSeries series2 = new TimeSeries("Line2");
for (int i=0;i<x2.length;i++){
series.add(x2[i],y2[i]);
}
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series);
dataset.addSeries(series2);
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.CYAN);
renderer.setPointStyle(PointStyle.SQUARE);
renderer.setFillPoints(true);
renderer.setLineWidth(3);
renderer.setDisplayChartValues(true);
XYSeriesRenderer renderer2 = new XYSeriesRenderer();
renderer2.setColor(Color.BLACK);
renderer2.setPointStyle(PointStyle.CIRCLE);
renderer2.setFillPoints(true);
renderer2.setLineWidth(3);
renderer2.setDisplayChartValues(true);
XYMultipleSeriesRenderer mrenderer = new XYMultipleSeriesRenderer();
mrenderer.addSeriesRenderer(renderer);
mrenderer.addSeriesRenderer(renderer2);
mrenderer.setChartTitle("title");
mrenderer.setBackgroundColor(Color.WHITE);
mrenderer.setShowGrid(true);
mrenderer.setApplyBackgroundColor(true);
mrenderer.setXTitle("Days");
mrenderer.setYTitle("datas");
mrenderer.setGridColor(Color.GRAY);
// mrenderer.setZoomButtonsVisible(true);
Intent intent = ChartFactory.getLineChartIntent(context, dataset, mrenderer, "Line graph title");
return intent;
}
Practically the same as in the video. But my doesnt work, instead of getting two different lines, I get only one. When the last data of the first line (x) ends it goes to the first data of the second line (x2), so the second line continues from the first one.
Thanks in advance!

Shouldn't the following:
series.add(x2[i],y2[i]);
be actually:
series2.add(x2[i],y2[i]);
Note the '2'.

TimeSeries series = new TimeSeries("Line1");
for (int i=0;i<x.length;i++){
series.add(x[i],y[i]);
}
int[] x2 = {1,2,3,4,5,6,7,8,9,10};
int[] y2 = {39,145,35,87,2,65,48,49,100,106};
TimeSeries series2 = new TimeSeries("Line2");
for (int i=0;i<x2.length;i++){
series2.add(x2[i],y2[i]); // The change is here...
}

Related

Dynamic line chart using Achartengine is not working

I am making dynamic line chart using Achartengine and this is working on static data but not working on dynamic data.Actual,plan and month is dynamic.I want to create line chart based on the values of actual,plan and month.I am using below code.
private void drawChart() {
XYSeries actualSeries = new XYSeries("Actual");
// Creating an XYSeries for Expense<br />
XYSeries planSeries = new XYSeries("Plan");
// Adding data to Income and Expense Series
for (int i = 0; i <actualList.size; i++) {
actualSeries.add(i,Double.parseDouble(actualList.get(i)));
planSeries.add(i,Double.parseDouble(planList.get(i)));
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset xyMultipleSeriesDataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
xyMultipleSeriesDataset.addSeries(actualSeries);
// Adding Expense Series to dataset
xyMultipleSeriesDataset.addSeries(planSeries);
XYSeriesRenderer actualRenderer = new XYSeriesRenderer();
actualRenderer.setColor(Color.GREEN);
actualRenderer.setPointStyle(PointStyle.CIRCLE);
actualRenderer.setFillPoints(true);
actualRenderer.setLineWidth(2);
actualRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer planRenderer = new XYSeriesRenderer();
planRenderer.setColor(Color.RED);
planRenderer.setPointStyle(PointStyle.CIRCLE);
planRenderer.setFillPoints(true);
planRenderer.setLineWidth(2);
planRenderer.setDisplayChartValues(true);
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setLabelsColor(Color.RED);
multiRenderer.setPanEnabled(false, false);
/* multiRenderer.setYLabels(5);
multiRenderer.setXLabels(1);
*/ multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setYLabelsColor(0, Color.BLACK);
//* multiRenderer.setShowGridX(true);
//multiRenderer.setShowGridY(true)
multiRenderer.setGridColor(Color.BLACK);
multiRenderer.setChartTitle("Plan vs Actual Curve");
multiRenderer.setXTitle("Months");
multiRenderer.setYTitle("plan/actual");
multiRenderer.setZoomButtonsVisible(false);
for (int i = 0; i < monthList.size(); i++) {
multiRenderer.addXTextLabel(i + 1, monthList.get(i).toString());
}
multiRenderer.addSeriesRenderer(actualRenderer);
multiRenderer.addSeriesRenderer(planRenderer);
// Getting a reference to LinearLayout of the MainActivity Layout<br />
LinearLayout chartContainer = (LinearLayout) mView.findViewById(R.id.chart_container);
// Creating a Line Chart<br />
GraphicalView chart = ChartFactory.getLineChartView(getActivity(), xyMultipleSeriesDataset, multiRenderer);
chartContainer.addView(chart);
if (chart != null) {
chartContainer.removeView(chart);
chart.repaint();
}
}
Thanks in advance
I have solved my question myself after doing some research.The problem was UI update problem.Once the chart is plotted then for new data we have to remove that view and should create new chart view based on data.Below is the working code.
private void drawChart() {
// Creating an XYSeries for Income
XYSeries actualSeries = new XYSeries("Actual");
// Creating an XYSeries for Expense<br />
XYSeries planSeries = new XYSeries("Plan");
XYSeries cupOneSeries = new XYSeries("Cup1");
XYSeries cupTwoSeries = new XYSeries("Cup2");
XYSeries cupThreeSeries = new XYSeries("Cup3");
// Adding data to Income and Expense Series
Log.e("x axis value in curve", "" + xAxisValueList.size());
Log.e("size of Actual", actualList.size() + "");
Log.e("size of plan", planList.size() + "");
for (int i = 0; i < actualList.size(); i++) {
actualSeries.add(i, Math.round(Double.parseDouble(actualList.get(i))));
planSeries.add(i, Math.round(Double.parseDouble(planList.get(i))));
cupOneSeries.add(i, Math.round(Double.parseDouble(cupOneList.get(i))));
cupTwoSeries.add(i, Math.round(Double.parseDouble(cupTwoList.get(i))));
cupThreeSeries.add(i, Math.round(Double.parseDouble(cupThreeList.get(i))));
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset xyMultipleSeriesDataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
xyMultipleSeriesDataset.addSeries(actualSeries);
// Adding Expense Series to dataset
xyMultipleSeriesDataset.addSeries(planSeries);
xyMultipleSeriesDataset.addSeries(cupOneSeries);
xyMultipleSeriesDataset.addSeries(cupTwoSeries);
xyMultipleSeriesDataset.addSeries(cupThreeSeries);
XYSeriesRenderer actualRenderer = new XYSeriesRenderer();
actualRenderer.setColor(getActivity().getResources().getColor(R.color.logo_blue));
actualRenderer.setPointStyle(PointStyle.CIRCLE);
actualRenderer.setFillPoints(true);
actualRenderer.setLineWidth(2);
actualRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer planRenderer = new XYSeriesRenderer();
planRenderer.setColor(getActivity().getResources().getColor(R.color.logo_orange));
planRenderer.setPointStyle(PointStyle.CIRCLE);
planRenderer.setFillPoints(true);
planRenderer.setLineWidth(2);
planRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupOneRenderer = new XYSeriesRenderer();
cupOneRenderer.setColor(getActivity().getResources().getColor(R.color.black));
cupOneRenderer.setPointStyle(PointStyle.CIRCLE);
cupOneRenderer.setFillPoints(true);
cupOneRenderer.setLineWidth(2);
cupOneRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupTwoRenderer = new XYSeriesRenderer();
cupTwoRenderer.setColor(getActivity().getResources().getColor(R.color.green));
cupTwoRenderer.setPointStyle(PointStyle.CIRCLE);
cupTwoRenderer.setFillPoints(true);
cupTwoRenderer.setLineWidth(2);
cupTwoRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupThreeRenderer = new XYSeriesRenderer();
cupThreeRenderer.setColor(Color.parseColor("#0D8ECF"));
cupThreeRenderer.setPointStyle(PointStyle.CIRCLE);
cupThreeRenderer.setFillPoints(true);
cupThreeRenderer.setLineWidth(2);
cupThreeRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart<br />
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setLabelsColor(Color.RED);
multiRenderer.setPanEnabled(true,false);
/* multiRenderer.setLabelsTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
multiRenderer.setLegendTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
*/ multiRenderer.setChartValuesTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setYLabelsColor(0, Color.BLACK);
multiRenderer.setShowGridX(true);
multiRenderer.setShowGridY(true);
multiRenderer.setGridColor(Color.BLACK);
multiRenderer.setChartTitle("Plan vs Actual Curve");
multiRenderer.setXTitle("Months");
multiRenderer.setYTitle("plan/actual");
multiRenderer.setZoomButtonsVisible(false);
multiRenderer.setZoomEnabled(true);
for (int i = 0; i < monthList.size(); i++) {
multiRenderer.addXTextLabel(i, monthList.get(i).toString());
}
multiRenderer.addSeriesRenderer(actualRenderer);
multiRenderer.addSeriesRenderer(planRenderer);
multiRenderer.addSeriesRenderer(cupOneRenderer);
multiRenderer.addSeriesRenderer(cupTwoRenderer);
multiRenderer.addSeriesRenderer(cupThreeRenderer);
Log.e("size of actual log",actualList.size()+"");
LinearLayout chartContainer = (LinearLayout) mView.findViewById(R.id.chart_container);
if (monthList.size() > 0) {
// Getting a reference to LinearLayout of the MainActivity Layout<br />
chartContainer.removeAllViews();
//drawing bar chart<br />
chart = ChartFactory.getLineChartView(getActivity(), xyMultipleSeriesDataset, multiRenderer);
//adding the view to the linearlayout<br />
chartContainer.addView(chart);
} else {
chartContainer.removeAllViews();
CustomToast.initToast(getActivity(),"No data available for S-curve");
}
}

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 .

How to display Bar Chart properly in AChart Engine android

I am using AChart Engine to show a bar chart and want to display a bar chart like this:
But it ends up with this:
It is very frastrating and I am trying for last 4 hours to give it a proper format but failed. I searched internet for a proper tutorial but couldn't manage one. Can you please tell me what snippet should I include?
This is my trying code:
public class BarGraph{
public GraphicalView getView(Context context)
{
// Bar 1
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
CategorySeries ac = new CategorySeries("AC");
CategorySeries pe = new CategorySeries("PE");
CategorySeries wa = new CategorySeries("WA");
CategorySeries tl = new CategorySeries("TL");
CategorySeries ml = new CategorySeries("ML");
CategorySeries ce = new CategorySeries("CE");
CategorySeries re = new CategorySeries("RE");
CategorySeries ot = new CategorySeries("OT");
ac.add(291);
dataset.addSeries(ac.toXYSeries());
pe.add(11);
dataset.addSeries(pe.toXYSeries());
wa.add(204);
dataset.addSeries(ac.toXYSeries());
tl.add(28);
dataset.addSeries(pe.toXYSeries());
ml.add(0);
dataset.addSeries(ac.toXYSeries());
ce.add(21);
dataset.addSeries(pe.toXYSeries());
re.add(51);
dataset.addSeries(ac.toXYSeries());
ot.add(4);
dataset.addSeries(pe.toXYSeries());
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setChartTitle("Submission Statistics");
mRenderer.setXTitle("Verdict Code");
mRenderer.setYTitle("No. of Submissions");
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setLabelsColor(Color.BLACK);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setZoomEnabled(true);
mRenderer.setZoomButtonsVisible(true);
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.parseColor("#00AA00"));
renderer.setDisplayChartValues(true);
renderer.setChartValuesSpacing((float) 0.5);
XYSeriesRenderer renderer2 = new XYSeriesRenderer();
renderer2.setColor(Color.parseColor("#666600"));
renderer2.setDisplayChartValues(true);
renderer2.setChartValuesSpacing((float) 0.5);
XYSeriesRenderer renderer3 = new XYSeriesRenderer();
renderer3.setColor(Color.parseColor("#FF0000"));
renderer3.setDisplayChartValues(true);
renderer3.setChartValuesSpacing((float) 0.5);
XYSeriesRenderer renderer4 = new XYSeriesRenderer();
renderer4.setColor(Color.parseColor("#0000FF"));
renderer4.setDisplayChartValues(true);
renderer4.setChartValuesSpacing((float) 0.5);
XYSeriesRenderer renderer5 = new XYSeriesRenderer();
renderer5.setColor(Color.parseColor("#6767D0"));
renderer5.setDisplayChartValues(true);
renderer5.setChartValuesSpacing((float) 0.5);
XYSeriesRenderer renderer6 = new XYSeriesRenderer();
renderer6.setColor(Color.parseColor("#AAAA00"));
renderer6.setDisplayChartValues(true);
renderer6.setChartValuesSpacing((float) 0.5);
XYSeriesRenderer renderer7 = new XYSeriesRenderer();
renderer7.setColor(Color.parseColor("#00AAAA"));
renderer7.setDisplayChartValues(true);
renderer7.setChartValuesSpacing((float) 0.5);
XYSeriesRenderer renderer8 = new XYSeriesRenderer();
renderer8.setColor(Color.parseColor("#000000"));
renderer8.setDisplayChartValues(true);
renderer8.setChartValuesSpacing((float) 0.5);
mRenderer.addSeriesRenderer(renderer);
mRenderer.addSeriesRenderer(renderer2);
mRenderer.addSeriesRenderer(renderer3);
mRenderer.addSeriesRenderer(renderer4);
mRenderer.addSeriesRenderer(renderer5);
mRenderer.addSeriesRenderer(renderer6);
mRenderer.addSeriesRenderer(renderer7);
mRenderer.addSeriesRenderer(renderer8);
return ChartFactory.getBarChartView(context, dataset,mRenderer, Type.DEFAULT);
}
}
I suggest that instead of building CategorySeries, you build XYSeries. Then, in the first series do: series.add(1, 291); the second one will be series.add(2, 11); and so on.

Different color bars using multiple series

I am totally new to Android and i am trying to create a bar chart using AChartEngine, it has 3 bars and each bar should be different color. I tried using multiple series but can't make my x-axis values align with bars
protected void onResume() {
super.onResume();
layout = (LinearLayout) findViewById(R.id.chart);
if (mChartView == null)
{
PeakSeries = new XYSeries("Income");
ForecastPeakSeries = new XYSeries("Expense");
ForecastSeries = new XYSeries("Expense");
int[] x = { 1,2,3};
int income = 2000;
int expense = 2700;
System.out.println("Here");
Series1.add(x[0],income);
Series2.add(x[1],expense);
Series3.add(x[2],expense);
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(Series1);
dataset.addSeries(Series2);
dataset.addSeries(Series3);
XYSeriesRenderer Renderer1 = new XYSeriesRenderer();
Renderer1 .setColor(Color.RED);
Renderer1 .setChartValuesTextSize(18);
Renderer1 .setFillPoints(true);
Renderer1 .setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer Renderer2 = new XYSeriesRenderer();
Renderer2 .setColor(Color.YELLOW);
Renderer2 .setChartValuesTextSize(18);
Renderer2 .setDisplayChartValues(true);
XYSeriesRenderer Renderer3 = new XYSeriesRenderer();
Renderer3 .setColor(Color.CYAN);
Renderer3 .setChartValuesTextSize(18);
Renderer3 .setFillPoints(true);
Renderer3 .setChartValuesTextAlign(Align.CENTER);
Renderer3 .setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
double[] range = {0,5,0,5};
multiRenderer.setMargins(new int[] {50, 50, 50, 50});
multiRenderer.setAxisTitleTextSize(16);
multiRenderer.setChartTitleTextSize(30);
multiRenderer.setLabelsTextSize(15);
multiRenderer.setLegendTextSize(20);
multiRenderer.setLegendHeight(40);
multiRenderer.setBarSpacing(-0.7);
multiRenderer.setAxesColor(Color.WHITE);
multiRenderer.setInitialRange(range, 1);
multiRenderer.setXAxisMin(0.4);
multiRenderer.setXAxisMax(4);
multiRenderer.setYAxisMax(5000);
multiRenderer.setYAxisMin(0);
multiRenderer.setXLabelsAlign(Align.RIGHT);
multiRenderer.setYLabelsAlign(Align.RIGHT);
//multiRenderer.s(Align.LEFT);
multiRenderer.setPanEnabled(false, false);
multiRenderer.setZoomEnabled(true, true);
multiRenderer.setChartTitle("7 Day Outlook - Maxiumum Demand");
multiRenderer.setXTitle("Date");
multiRenderer.setYTitle("MW");
multiRenderer.addSeriesRenderer(Renderer1 );
multiRenderer.addSeriesRenderer(Renderer2 );
multiRenderer.addSeriesRenderer(Renderer3 );
final GraphicalView mChartView = ChartFactory.getBarChartView(TestSevenDay1.this, dataset, multiRenderer,Type.DEFAULT);
layout.addView(mChartView);
}
else
{
mChartView.repaint();
}
}
Any help is greatly appreciated.
I handled it by setting the Type from Type.Default to Type.Stacked in the getBarChartView.
ChartFactory.getBarChartView(TestSevenDay1.this, dataset, multiRenderer, Type.STACKED);
When you have bar charts with only one item per series, it is a good idea not to use renderer.setBarSpacing() and use renderer.setBarWidth() instead.

Bar graph using AchartEngine

I have created bar graph using aChartEngine library. Can anyone help me how to increase the width of the bars and position the bars at the centre of X-axis?
This is my BarGraph class:
public class BarGraph {
public Intent getIntent(Context context){
XYMultipleSeriesRenderer mrenderer = new XYMultipleSeriesRenderer();
double[] range = {0,5,0,5};
int[] y = {24,30,12};
CategorySeries series1 = new CategorySeries("Today");
CategorySeries series2 = new CategorySeries("Next day");
CategorySeries series3 = new CategorySeries("2 days later");
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
for (int i=0;i<3;i++){
switch(i){
case 0:
series1.add(y[0]);
dataset.addSeries(series1.toXYSeries());
break;
case 1:
series2.add(y[1]);
dataset.addSeries(series2.toXYSeries());
break;
case 2:
series3.add(y[2]);
dataset.addSeries(series3.toXYSeries());
break;
}
}
XYSeriesRenderer renderer1 = new XYSeriesRenderer();
renderer1.setColor(Color.GREEN);
XYSeriesRenderer renderer2 = new XYSeriesRenderer();
renderer2.setColor(Color.BLUE);
XYSeriesRenderer renderer3 = new XYSeriesRenderer();
renderer3.setColor(Color.RED);
mrenderer.setAxisTitleTextSize(16);
mrenderer.setChartTitleTextSize(20);
mrenderer.setLabelsTextSize(15);
mrenderer.setLegendTextSize(15);
mrenderer.setBarSpacing(0);
mrenderer.setXLabels(1);
mrenderer.addXTextLabel(2.5, "Outstanding jobs");
mrenderer.setMargins(new int[] {20, 30, 15, 0});
mrenderer.setAxesColor(Color.WHITE);
mrenderer.setChartTitle("Work per day");
mrenderer.setXTitle("Days");
mrenderer.setInitialRange(range, 1);
mrenderer.setBarSpacing(1);
mrenderer.setXAxisMin(0);
mrenderer.setXAxisMax(5);
mrenderer.setYAxisMin(0);
mrenderer.setPanEnabled(false, false);
mrenderer.setZoomEnabled(false, false);
mrenderer.addSeriesRenderer(renderer1);
mrenderer.addSeriesRenderer(renderer2);
mrenderer.addSeriesRenderer(renderer3);
Intent intent = ChartFactory.getBarChartIntent(context, dataset, mrenderer, Type.DEFAULT);
return intent;
}}
This is the screenshot of the bargraph that i get,
I need a bargraph like this,
How can i achieve this? Please help me.
If you want to set width of the bars--
try this...
renderer.setBarSpacing(-0.7);
The only way that I found to fix your problem is a quite ugly but until they improve colour management in achartengine it might be as good as it gets.
Firstly remove the for-case as per larlins suggestion.
Then add empty points to the other series corresponding to the filled points in the other series:
series1.add(1,y[0]);
series1.add(2,0);
series1.add(3,0);
dataset.addSeries(series1);
series2.add(1,0);
series2.add(2,y[1]);
series2.add(3,0);
dataset.addSeries(series2);
series3.add(1,0);
series3.add(2,0);
series3.add(3,y[2]);
dataset.addSeries(series3);
Also set the BarSpacing to 0 and the Type to Type.STACKED instead of Type.DEFAULT.
I think it would look better if you removed the Label and changed the XTitle to "Outstanding Jobs"
Remove the for loop and switch case i think that is unnecessary.and add two blank categories series like
CategorySeries series(nameit) = new CategorySeries("");
CategorySeries series(nameit) = new CategorySeries("");
place it one after CategoriesSeries series1 and the other after CategoriesSeries series2.
then add zero values two place one after series1 and the other after series2 like
series(name it).add(0);
dataset.addSeries(series(name it).toXYSeries());
and the same do with the renderer :Make two XYSeriesRenderer as Transparent color and paste them after renderer1 and the other after renderer2 like this
XYSeriesRenderer renderer(nameit) = new XYSeriesRenderer();
renderer1.setColor(Color.TRANSPARENT);
XYSeriesRenderer renderer(nameit) = new XYSeriesRenderer();
renderer1.setColor(Color.TRANSPARENT);
and see the magic you got what you want.cheers
i got an answer.... :)
i used setBarspacing, but setting the value 0 or 0.5...
The chart can be moved so the values are easily visible...... :)
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setLabelsTextSize(15);
multiRenderer.setBarSpacing(0.5);
multiRenderer.setChartTitle("Commercial Complex APK");
multiRenderer.setXTitle("Projects");
multiRenderer.setYTitle("Variance");
multiRenderer.setZoomButtonsVisible(true);

Categories

Resources