우선 실행화면을 살펴보면 아래와 같습니다.
두개의 실행화면중에서 우선 왼쪽의 형태를 살펴보고 그런 다음 오른쪽 형태로 변경해 보겠습니다.
(파라미터 값을 한개만 변경하면 형태가 바뀝니다.)
프로젝트의 생성 및 그래프 라이브러의 참조 추가
achartengine을 사용하여 그래프를 표시하는 기본적인 방법은 다음의 포스팅을 참조하시기 바랍니다.[Android Lib] 막대그래프 그리기 (1)
처리를 위해서 확인할 부분
처리를 위해서 확인할 부분은 두 부분 입니다. 우선 표시할 수치값들이 하나 더 늘어나야 합니다.// 표시할 수치값 Listvalues = new ArrayList (); // 안드로이드폰 수치값들 values.add(new double[] { 10230, 10300, 14240, 15244, 15900, 19200, 22030, 21200, 19500, 15500, 12600, 14000 }); // 아이폰용 수치값들 values.add(new double[] { 15230, 17300, 9240, 10540, 7900, 9200, 12030, 11200, 9500, 10500, 11600, 13500 });
그런 다음 두 종류의 수치값에 대한 분류명과 색상이 정의되어야 합니다.
// 분류에 대한 이름
String[] titles = new String[] { "안드로이드폰", "아이폰" };
// 항목을 표시하는데 사용될 색상값
int[] colors = new int[] { Color.YELLOW, Color.BLUE };
전체 소스코드
처리에 사용된 전체 소스코드는 다음과 같습니다. 앞 포스팅에서 소개한 소스에서 일부만 수정한 내용입니다.package kr.pe.hoyanet.chartex;
import java.util.ArrayList;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.widget.LinearLayout;
public class CharExActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 표시할 수치값
List<double[]> values = new ArrayList<double[]>();
// 안드로이드폰 수치값들
values.add(new double[] { 10230, 10300, 14240, 15244, 15900,
19200, 22030, 21200, 19500, 15500, 12600, 14000 });
// 아이폰용 수치값들
values.add(new double[] { 15230, 17300, 9240, 10540, 7900,
9200, 12030, 11200, 9500, 10500, 11600, 13500 });
/** 그래프 출력을 위한 그래픽 속성 지정객체 */
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
// 상단 표시 제목과 글자 크기
renderer.setChartTitle("2011년도 판매량");
renderer.setChartTitleTextSize(20);
// 분류에 대한 이름
String[] titles = new String[] { "안드로이드폰", "아이폰" };
// 항목을 표시하는데 사용될 색상값
int[] colors = new int[] { Color.YELLOW, Color.BLUE };
// 분류명 글자 크기 및 각 색상 지정
renderer.setLegendTextSize(15);
int length = colors.length;
for (int i = 0; i < length; i++) {
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(colors[i]);
renderer.addSeriesRenderer(r);
}
// X,Y축 항목이름과 글자 크기
renderer.setXTitle("월");
renderer.setYTitle("판매량");
renderer.setAxisTitleTextSize(12);
// 수치값 글자 크기 / X축 최소,최대값 / Y축 최소,최대값
renderer.setLabelsTextSize(10);
renderer.setXAxisMin(0.5);
renderer.setXAxisMax(12.5);
renderer.setYAxisMin(0);
renderer.setYAxisMax(24000);
// X,Y축 라인 색상
renderer.setAxesColor(Color.WHITE);
// 상단제목, X,Y축 제목, 수치값의 글자 색상
renderer.setLabelsColor(Color.CYAN);
// X축의 표시 간격
renderer.setXLabels(12);
// Y축의 표시 간격
renderer.setYLabels(5);
// X,Y축 정렬방향
renderer.setXLabelsAlign(Align.LEFT);
renderer.setYLabelsAlign(Align.LEFT);
// X,Y축 스크롤 여부 ON/OFF
renderer.setPanEnabled(false, false);
// ZOOM기능 ON/OFF
renderer.setZoomEnabled(false, false);
// ZOOM 비율
renderer.setZoomRate(1.0f);
// 막대간 간격
renderer.setBarSpacing(0.5f);
// 설정 정보 설정
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
for (int i = 0; i < titles.length; i++) {
CategorySeries series = new CategorySeries(titles[i]);
double[] v = values.get(i);
int seriesLength = v.length;
for (int k = 0; k < seriesLength; k++) {
series.add(v[k]);
}
dataset.addSeries(series.toXYSeries());
}
// 그래프 객체 생성
GraphicalView gv = ChartFactory.getBarChartView(this, dataset,
renderer, Type.STACKED);
// 그래프를 LinearLayout에 추가
LinearLayout llBody = (LinearLayout) findViewById(R.id.llBody);
llBody.addView(gv);
}
}
이 방법의 단점은 처음 표시된 항목이 아래 깔리고 그 위에 두번째 항목을 표시하기 때문에, 두번째 항목중에서 첫번째 항목보다 큰 값이 있다면, 그 값은 두번째 항목의 값에 가려져 표시가 되지 않는다는 점 입니다. (실행화면에서 1월과 2월의 데이터를 참조하세요)
만약 이런 현상을 해결하기 위해서 두개의 항목을 병렬(실행화면 두번째)로 표현하고자 한다면 105~106라인의 막대그래프 생성부분에서 마지막 파라미터를 Type.DEFAULT로 수정합니다.
// 그래프 객체 생성
GraphicalView gv = ChartFactory.getBarChartView(this, dataset,
renderer, Type.DEFAULT);
이제 즐깁시다~!!
'Android > Android Lib' 카테고리의 다른 글
| [Android Lib] 원 그래프 그리기 (0) | 17:02:07 |
|---|---|
| [Android Lib] 막대그래프 그리기 (2) (0) | 2012/02/22 |
| [Android Lib] 막대그래프 그리기 (1) (0) | 2012/02/22 |
| [안드로이드 TIP] 내가 만든 어플리케이션에 광고 넣기 (0) | 2011/07/15 |





