I am trying to create Bar Chart using AchartEngine but various things doesn't work for me..
1) Unable to show Grid.
2) Unable to remove category series title i.e "Bar Graph".
3) It's not showing bars as it should show.
4) By Default white color background is visible.
is it possible to provide space between each bars??
Bar Chart Code
CategorySeries series = new CategorySeries("Bar Graph");
for (int i = 0; i < availCatList.size(); i++)
series.add(availCatList.get(i), mTotal.get(i));
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series.toXYSeries());
XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
seriesRenderer.setChartValuesSpacing(0.5f);
seriesRenderer.setDisplayChartValues(true);
seriesRenderer.setColor(Color.GREEN);
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setChartTitle("Bar Chart");
mRenderer.setShowGrid(true);
mRenderer.setAxisTitleTextSize(15);
mRenderer.setXLabelsAlign(Align.CENTER);
mRenderer.setXTitle("Categories");
mRenderer.setYTitle("Amount");
mRenderer.setScale(1.0f);
for (int i = 0; i < availCatList.size(); i++) {
mRenderer.addXTextLabel(i + 1, availCatList.get(i));
}
mRenderer.setXLabels(0);
mRenderer.addSeriesRenderer(seriesRenderer);
view = ChartFactory.getBarChartView(this, dataset, mRenderer,
Type.DEFAULT);
// layout.removeAllViews();
layout.addView(view);
Any Help would be highly appreciated..
Thanks
mRenderer.setShowGrid(true) works fine in all the examples in the demo code. Try to set another color using mRenderer.setGridColor(color);
You mean the legend: mRenderer.setShowLegend(false);
series.add(mTotal.get(i)); is the correct usage for bar charts.
That's probably from the profile. Just set your own background color.
Space between bars: read the APIs for mRenderer.setBarSpacing();
Related
I added two XYSeriesRenderer to XYMultipleSeriesRenderer. I need to customize XYSeriesRenderer want to increase width of bars i include this code but it didn't works rendererm.setLineWidth(10);
Then both bar are attaching closely so need to give some space between both XYSeriesRenderer? This code mRenderer.setBarSpacing(.5); is working for XYMultipleSeriesRenderer, but i need to give space between two XYSeriousRenderer. Please refer my code and picture try to give your suggestions.
seriesm = new CategorySeries("Male");
for(int i=0; i < malec.length; i++){
seriesm.add("Bar"+(i+1),malec[i]);
}
seriesf = new CategorySeries("Female");
for(int i=0; i < fmalec.length; i++){
seriesf.add("Bar"+(i+1),fmalec[i]);
}
dataSet = new XYMultipleSeriesDataset();
dataSet.addSeries(seriesm.toXYSeries());
dataSet.addSeries(seriesf.toXYSeries());
//customization of the chart
rendererm = new XYSeriesRenderer();
rendererm.setColor(Color.RED);
rendererm.setDisplayChartValues(true);
rendererm.setLineWidth(20);
rendererf = new XYSeriesRenderer();
rendererf.setColor(Color.YELLOW);
rendererf.setDisplayChartValues(true);
rendererf.setLineWidth(30);
mRenderer = new XYMultipleSeriesRenderer();
mRenderer.addSeriesRenderer(rendererm);
mRenderer.addSeriesRenderer(rendererf);
mRenderer.setChartTitle("Gender");
mRenderer.setYTitle("No of Reports");
mRenderer.setZoomButtonsVisible(true);
mRenderer.setShowLegend(true);
mRenderer.setShowGridX(true);
mRenderer.setBarSpacing(.5);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.BLACK);
mRenderer.setXAxisMin(0);
mRenderer.setYAxisMin(0);
mRenderer.setXAxisMax(2);
mRenderer.setXLabels(0);
mRenderer.setPanEnabled(true, true);
layout=(LinearLayout)findViewById(R.id.barchart);
mChartView=ChartFactory.getBarChartView(getApplicationContext(), dataSet, mRenderer, org.achartengine.chart.BarChart.Type.DEFAULT);
layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
Use
renderer.setBarWidth(width);
for setting width of bar.
I am using achartengine to display charts in an Android app.
The app allows the user to display different datasets and different charts types depending on the selections they make from spinners.
My problem is this. The original chart displays correctly and all zoom, pan, and onClick events preform as expected. But when I remove the first chart and add another, the charts will not zoom or pan from touch and onClick will not return selected point data. The achartengine zoom and reset buttons still display and work as expected. To remove a chart and add another I have used different variations of the following code with the same results.
private void repaint() {
mchart1_LL_pie = (LinearLayout) this.findViewById(R.id.chart1_LL_pie);
if (mChart1_ChartView_pie != null) {
mchart1_LL_pie.removeView(mChart1_ChartView_pie);
}
mChart1_ChartView_pie = ChartFactory.getPieChartView(getApplicationContext(), mChart1_Pie_Series, mChart1_Pie_Renderer);
mchart1_LL_pie.addView(mChart1_ChartView_pie, 0, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
I have also tried to remove all the renderers and clear the data series with the following code.
mChart1_Pie_Renderer.removeAllRenderers();
int size = mChart1_Pie_Series.getItemCount();
for (int i = 0; i < size; i++) {
mChart1_Pie_Series.remove(0);
And then display the chart with a rebuilt dataset and renderer using the following.
mChart1_ChartView_pie = ChartFactory.getPieChartView(getApplicationContext(), mChart1_Pie_Series, mChart1_Pie_Renderer);
The problem with this approach is that the next chart is not displayed until the display is touched. After the display is touched, the correct chart is displayed and all zoom, pan and onClick events work properly.
Has anyone experienced this problem? If so, how did you solve it?
Any help or suggestions would be greatly appreciated. Thank you
Don
I am doing an application with charts. I have an evolution chart with TimeSeries. I paste my function to draw the chart. It can help you :)
public void drawChart() {
mChartView = null;
mDataset = null;
mRenderer = null;
mDataset = new XYMultipleSeriesDataset();
mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setAxisTitleTextSize(15);
mRenderer.setLabelsTextSize(15);
mRenderer.setLegendTextSize(15);
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(Color.BLUE);
r.setFillPoints(true);
mRenderer.addSeriesRenderer(r);
mRenderer.setZoomEnabled(true);
mRenderer.setShowGrid(true);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setShowLegend(true);
mRenderer.setShowLabels(true);
mRenderer.setLabelsColor(Color.BLACK);
mRenderer.setBackgroundColor(Color.TRANSPARENT);
mRenderer.setYLabelsPadding(20);
mRenderer.setXLabelsPadding(7);
mRenderer.setYLabelsAlign(Align.LEFT);
mRenderer.setMarginsColor(Color.rgb(220, 220, 220));
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setLabelsColor(Color.BLACK);
mRenderer.setXLabelsColor(Color.BLACK);
mRenderer.setYLabelsColor(0, Color.BLACK);
// mRenderer.setAxisTitleTextSize(30);
mRenderer.setGridColor(Color.BLACK);
mRenderer.setXRoundedLabels(false);
// mRenderer.setLabelsTextSize(25);
mRenderer.setYTitle(Config.getResource("PRICE") + "("
+ dto.getCurrencyCode() + ")");
mRenderer.setMargins(new int[] { 0, 60, 50, 0 });
mRenderer.setMarginsColor(Color.WHITE);
// mRenderer.setXTitle("Date");
mRenderer.setShowLegend(false);
mRenderer.setInScroll(true);
evolutionSecurity = new TimeSeries("");
mDataset.addSeries(evolutionSecurity);
fillDataEvolution(); //Get data into serie
mChartView = ChartFactory.getTimeChartView(this, mDataset, mRenderer,
"dd-MM-yy");
LinearLayout layout = (LinearLayout) findViewById(R.id.graphe_evolution_rate_currency);
layout.addView(mChartView);
if (layout != null)
layout.removeAllViews();
layout.addView(mChartView);
mChartView.repaint();
mChartView = null;
}
Then when i select an another value in my spinner i call this method and the chart is redrawn correctly.
I am trying to plot a graph using achartengine. As you can see from the image, it looks quite ugly.I want to ,
1. Reduce space between values. I cannot have that much space since I need to add more series to it.
2. I am not plotting any negative values, so why it's showing lines at the bottom. The values displayed at the bottom are -1.I want to eliminate any lines at the bottom.
3. If possible, I want to change the background color of graph from black to some other color.
Thanks. Code is included with which I am working.
String see = pull.trim();
String str = '"' + see + '"';
int[] intArray = new int[str.length()];
for(int i=0; i < str.length(); i++){
intArray[i] = Character.digit(str.charAt(i), 10);
}
CategorySeries series = new CategorySeries("My Graph");
for(int i = 0; i <intArray.length; i++){
series.add("Bar ", intArray[i]);
}
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series.toXYSeries());
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setDisplayChartValues(true);
renderer.setChartValuesSpacing((float) 0.1);
renderer.setColor(getResources().getColor(R.color.fuchsia));
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.addSeriesRenderer(renderer);
mRenderer.setChartTitle("My Graph");
mRenderer.setYTitle("Values");
mRenderer.setZoomButtonsVisible(true);
LinearLayout chart_container=(LinearLayout)findViewById(R.id.Chart_layout);
mChart=(GraphicalView)ChartFactory.getBarChartView(getBaseContext(), dataset, mRenderer, Type.DEFAULT);
chart_container.addView(mChart);
I found out that the bottom negative values were showing because there were spaces in my string with which I was plotting graph.So I wrote it this way,
Hopefully it helps someone in the future.
String see = pull.replaceAll("\\s+","");
int[] intArray = new int[see.length()];
for(int k=0; k < see.length(); k++){
intArray[k] = Character.digit(see.charAt(k), 10);
}
I am using Bar chart component from https://code.google.com/p/achartengine/ and I want just to increase the text size of labels which appear above the chart
I mean I want to make numbers (4,5) bigger that now
I tried the following code :
renderer.setAxisTitleTextSize(24);
renderer.setChartTitleTextSize(24);
renderer.setLabelsTextSize(24);
renderer.setLegendTextSize(24);
but I didn't get any difference
What should I do to achieve that ?
This line r.setChartValuesTextSize(24); solve the problem
The complete code :
protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(24);
renderer.setChartTitleTextSize(24);
renderer.setLabelsTextSize(24);
renderer.setLegendTextSize(24);
int length = colors.length;
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setLineWidth(24);
r.setColor(colors[i]);
// here is the magic
r.setChartValuesTextSize(24);
renderer.addSeriesRenderer(r);
}
return renderer;
}
I am using achartengine for showing a single bar chart in my app for a view. I need to increase the width of the bar. This is my code
CategorySeries series = new CategorySeries("Demo Bar Graph");
series.add(65);
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series.toXYSeries());
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setXAxisMin(2);
mRenderer.setXAxisMax(2);
mRenderer.setYAxisMin(0);
mRenderer.setYAxisMax(50);
try Using Below Code
renderer.setBarSpacing(-0.5);