如何绘制两个Y轴不同的比例在AChartEngine比例、不同、两个、AChartEngine

2023-09-07 15:41:39 作者:占有欲在作祟

我在绘制两个Y轴(一个在右边,一个在左)与不同的缩放在AChartEngine问题:我想左侧被缩放范围从0到40,它是正确的,但右侧的比例是不希望之一,因为它应该是从10到100。请帮助我。

我的源$ C ​​$ C这个样子的。

公开的LinearLayout执行(上下文的背景下){

 的String []标题=新的String [] {Ciggars};

名单<加倍[]> X =新的ArrayList<加倍[]>();

的for(int i = 0; I< titles.length;我++){
  x.add(新双[] {1,2,3,4,5,6,7});
}

名单<加倍[]>值=新的ArrayList<加倍[]>();
values​​.add(新的双[] {12.3,12.5,13.8,16.8,20.4,24.4,26.4,26.1,13.9});

行//设置颜色
INT []颜色=新INT [] {Color.BLUE,Color.YELLOW};
PointStyle []风格=新PointStyle [] {PointStyle.CIRCLE,PointStyle.DIAMOND};

XYMultipleSeriesRenderer渲染器=新XYMultipleSeriesRenderer(2);
setRenderer(渲染,颜色,款式);
INT长度= renderer.getSeriesRendererCount();
的for(int i = 0; I<长度;我++){
  ((XYSeriesRenderer)renderer.getSeriesRendererAt(I))setFillPoints(真)。
}

setChartSettings(渲染器,平均Cigarates,天,Cigarates,0,7,0,40,Color.LTGRAY,Color.LTGRAY);
//被分割的X和Y轴的片段
renderer.setXLabels(7);
renderer.setYLabels(10);
renderer.setShowGrid(真正的);
renderer.setXLabelsAlign(Align.RIGHT);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setZoomButtonsVisible(真正的);
renderer.setZoomRate(1.05f);
renderer.setLabelsColor(Color.WHITE);
renderer.setXLabelsColor(Color.GREEN);

renderer.setYLabelsColor(0,颜色[0]);
renderer.setYLabelsColor(1,颜色[1]);

renderer.setYTitle(%焦油/尼古丁,1);
//renderer.setYTitle(title,秤)
renderer.setYAxisAlign(Align.RIGHT,1);
renderer.setYLabelsAlign(Align.LEFT,1);

XYMultipleSeriesDataset数据集= buildDataset(标题,X值);
values​​.clear();

values​​.add(新的双[] {4.3,4.9,5.9,8.8,10.8,11.9,13.6,12.8});
addXYSeries(数据集,新的String [] {焦油/尼古丁},X值,1);

//设置背景颜色
renderer.setApplyBackgroundColor(真正的);
renderer.setBackgroundColor(Color.GRAY);
renderer.setMarginsColor(Color.GRAY);

GraphicalView gview = ChartFactory.getCubeLineChartView(背景下,数据集,渲染,0.3f);

的LinearLayout LNR = NULL;
LNR =新的LinearLayout(上下文);
lnr.addView(gview);

返回LNR; }
 

解决方案

您正在为具有右侧的Y轴的系列添加这些值:

  values​​.add(新的双[] {4.3,4.9,5.9,8.8,10.8,11.9,13.6,12.8});
 
如图直线L y 0.5x 2与x轴, y轴分别交于A, B两点, 在y轴上有一点C 0,4 .

作为AChartEngine计算可见光范围内的默认,为Y轴的范围是4.3和13.6之间。

所以,你要么设置10至100的值,或者您需要手动修改可见光范围内是这样的:

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

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; }

解决方案

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);