How to draw two Y-axis with different scaling in AChartEngine

拈花ヽ惹草 提交于 2019-12-10 19:09:27

问题


I have problem in drawing two Y-axis (one at right and one at left) with different scaling in AChartEngine: I want left side to be scaled from 0 to 40 which is correct, But the right side scaling is not the desire one, as it should be from 10 to 100. Please help me.

My source code look like this

public LinearLayout execute(Context context) {

String[] titles = new String[] { "Ciggars" };

List<double[]> x = new ArrayList<double[]>();

for (int i = 0; i < titles.length; i++) {
  x.add(new double[] { 1, 2, 3, 4, 5, 6, 7});
}

List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4, 26.1, 13.9 });

// Set color of lines
int[] colors = new int[] { Color.BLUE, Color.YELLOW };
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND};

XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(2);
setRenderer(renderer, colors, styles);
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++) {
  ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
}

setChartSettings(renderer, "Average Cigarates", "Days", "Cigarates", 0, 7, 0, 40, Color.LTGRAY, Color.LTGRAY);
// fragments on X and Y-axis to be divided
renderer.setXLabels(7);
renderer.setYLabels(10);
renderer.setShowGrid(true);
renderer.setXLabelsAlign(Align.RIGHT);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setZoomButtonsVisible(true);
renderer.setZoomRate(1.05f);
renderer.setLabelsColor(Color.WHITE);
renderer.setXLabelsColor(Color.GREEN);

renderer.setYLabelsColor(0, colors[0]);
renderer.setYLabelsColor(1, colors[1]);

renderer.setYTitle("% Tar/Nicotine", 1);
//renderer.setYTitle(title, scale)
renderer.setYAxisAlign(Align.RIGHT, 1);
renderer.setYLabelsAlign(Align.LEFT, 1);

XYMultipleSeriesDataset dataset = buildDataset(titles, x, values);
values.clear();

values.add(new double[] { 4.3, 4.9, 5.9, 8.8, 10.8, 11.9, 13.6, 12.8});
addXYSeries(dataset, new String[] { "Tar/Nicotine" }, x, values, 1);

// set background color
renderer.setApplyBackgroundColor(true);     
renderer.setBackgroundColor(Color.GRAY);
renderer.setMarginsColor(Color.GRAY);

GraphicalView gview = ChartFactory.getCubeLineChartView(context, dataset, renderer, 0.3f);

LinearLayout lnr = null;
lnr = new LinearLayout(context);
lnr.addView(gview);

return lnr; }

回答1:


You are adding these values for the series that has the Y axis on the right:

values.add(new double[] { 4.3, 4.9, 5.9, 8.8, 10.8, 11.9, 13.6, 12.8 });

As AChartEngine computes the visible range by default, the range for the Y axis is between 4.3 and 13.6.

So you have to either set your values between 10 and 100 or you have to manually modify the visible range this way:

renderer.setYAxisMin(10, 1);
renderer.setYAxisMax(100, 1);


来源:https://stackoverflow.com/questions/12651284/how-to-draw-two-y-axis-with-different-scaling-in-achartengine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!