[Android] 원 그래프 만들기 (MpAndroidChart)


개발도중 차트를 만들일이 있어 쉽게 만드는 방법을 알아보다가 재미있는 라이브러리를 발견하였습니다. 바로 MpAndroidChart이라는 라이브러리인데요 이 라이브러리를 사용하면 차트를 굉장히 쉽게 만들 수 있습니다. 이번 포스팅에서는 MpAndroidChart를 이용하여 원그래프(PieChart)를 만드는 방법에 대해 알아보겠습니다.


안드로이드 원 그래프 만들기

build.gradle

repositories{
    maven {url "https://jitpack.io"}
}
dependencies {
    compile 'com.github.PhilJay:MpAndroidChart:v3.0.2'
}

라이브러리 사용을 위해 build.gradle에서 아래에 있는 두줄을 추가해주도록 하겠습니다.


XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="org.androidtown.graph.MainActivity">

    <com.github.mikephil.charting.charts.PieChart
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/piechart">

    </com.github.mikephil.charting.charts.PieChart>

</RelativeLayout>

Java

public class MainActivity extends AppCompatActivity {

    PieChart pieChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pieChart = (PieChart)findViewById(R.id.piechart);

        pieChart.setUsePercentValues(true);
        pieChart.getDescription().setEnabled(false);
        pieChart.setExtraOffsets(5,10,5,5);

        pieChart.setDragDecelerationFrictionCoef(0.95f);

        pieChart.setDrawHoleEnabled(false);
        pieChart.setHoleColor(Color.WHITE);
        pieChart.setTransparentCircleRadius(61f);

        ArrayList<PieEntry> yValues = new ArrayList<PieEntry>();

        yValues.add(new PieEntry(34f,"Japen"));
        yValues.add(new PieEntry(23f,"USA"));
        yValues.add(new PieEntry(14f,"UK"));
        yValues.add(new PieEntry(35f,"India"));
        yValues.add(new PieEntry(40f,"Russia"));
        yValues.add(new PieEntry(40f,"Korea"));

        Description description = new Description();
        description.setText("세계 국가"); //라벨
        description.setTextSize(15);
        pieChart.setDescription(description);

        pieChart.animateY(1000, Easing.EasingOption.EaseInOutCubic); //애니메이션

        PieDataSet dataSet = new PieDataSet(yValues,"Countries");
        dataSet.setSliceSpace(3f);
        dataSet.setSelectionShift(5f);
        dataSet.setColors(ColorTemplate.JOYFUL_COLORS);

        PieData data = new PieData((dataSet));
        data.setValueTextSize(10f);
        data.setValueTextColor(Color.YELLOW);

        pieChart.setData(data);

    }
}

메서드 참고 URL


완성본

MpAndroidChart


[Android] 꺽은선 그래프 만들기 (MpAndroidChart)


댓글(22)

  • 2018.03.30 16:00

    비밀댓글입니다

    • 2018.03.30 16:19 신고

      물론 가능하죠 일단 데이터베이스에서 데이터는 잘 받아오신거죠? 그게 아니라면 일단 데이터베이스에서 데이터를 받아와야해요
      http://coding-factory.tistory.com/31
      http://coding-factory.tistory.com/32
      이 포스팅 참고하셔서 데이터를 받아오시고 데이터를 받아오셨으면 받아온 데이터를 리스트나 배열같은데 넣으셔서 yValues.add(이부분)에다가 반복문 같은것을 활용해주셔서 넣어주시면 됩니다.

  • ㅜㅜ
    2018.07.25 12:05

    데이터 베이스를 firebase으로 쓰고 있는데요
    데이터를 받아와서 그래프로 표현 하는 방법을 알수있을까요?

    • 2018.07.26 12:30 신고

      안타깝게도 firebase에서 데이터를 받아오는 방법은 제가 알지 못해요 ㅠㅠ 그래프로 표현하는 방법은 데이터베이스에서 데이터를 가져오신 뒤 yValues.add에 넣어주시면 됩니다.

  • 송유찬
    2018.09.21 04:23

    label 색상 흰색->검정으로 수정하고싶은데 가능한가요?

    • 2018.09.21 11:06 신고

      https://github.com/PhilJay/MPAndroidChart/wiki/Interaction-with-the-Chart

      위 경로로 들어가서 메서드 한번 찾아보세요

  • 도와주세요
    2018.10.22 15:47

    저 라이브러리 사용하려고 gradle 파일에 두줄을 추가하고 sync까지 했는데도
    Build창에서 Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.github.PhilJay:MpAndroidChart:v3.0.2.
    Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.github.PhilJay:MpAndroidChart:v3.0.2.
    Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve com.github.PhilJay:MpAndroidChart:v3.0.2.
    Unable to resolve dependency for ':app@release/compileClasspath': Could not resolve com.github.PhilJay:MpAndroidChart:v3.0.2.
    Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Could not resolve com.github.PhilJay:MpAndroidChart:v3.0.2.

    이렇게 뜨네요 ㅠㅠ
    라이브러리 부터 sync가 안돼서 진행이 되질 않아요 도와주세요 ㅠㅜㅠ

  • 자벌레
    2018.10.24 10:26

    앱에서 입력받아서 그 값을 가지고 그래프가 계속 바뀌게는 못만들까요?

  • 냥냥
    2019.04.29 19:46

    pieChart.getDescription().setEnabled(false);
    에서 getDescription 메소드랑

    ArrayList<PieEntry> yValues = new ArrayList<PieEntry>();
    에서 PieEntry 클래스 가 없다고 뜨는데 이건 어떻게 해야하나요?ㅠㅠ

    • 2019.05.02 00:04 신고

      오래전이라 기억이 잘 안나는데 PieEntry가 import된다면 import를 하시고 없으시면 하나 만드셔야할거같아요

  • 질문
    2019.10.11 02:29

    데이터값의 숫자를
    정수형식으로 맞출 순 없나요?ㅠ
    퍼센테이지말고 개수를 표현하고 싶어서요ㅠ

    • 2019.10.11 09:23 신고

      개수를 표현하시려면 원그래프보다 꺾은선이나 막대모양으로 하는게 좀 더 낫지 않을까요...?

    • 질문
      2019.10.11 16:04

      원형이 필요해서요
      정수형으로 표현 못하나요?

    • 2019.10.11 16:35 신고

      아마 원그래프는 비율로 나올거에요 PieEntry 클래스 들어가셔서 인자값으로 정수형이 들어갈 수 있나 확인해보시고 만약 가능하다면 한번 넣어보세요. 제가 이 라이브러리를 써봤다 이 정도여서 방법을 완벽하게 알려드리기는 어려울거같아요.

  • cheon
    2019.10.31 16:48

    안녕하세요 코딩팩토리님! 안드로이드 아두이노 통신 공부를 하고 있는 학생입니다!
    다름이아니라 저희가 아두이노와 압력센서를 연결해서 값을 받은 다음 블루투스를 통해서
    안드로이드 앱으로 보내려고 하는데요!
    그 값에 따라 원 그래프가 수시로 변할 수 있도록 할 수 있는 방법이 있을까요?
    추가로 앱에 그 값에 따른 분포도를 색으로 나타낼 수 있는 방법을 알고계신지 조언을 얻고 싶습니다!
    읽어주셔서 감사합니다!

    • 2019.10.31 23:26 신고

      일단 아두이노에서 통신이 오면 그것을 인식할 수 있게끔 코딩하는것이 중요할것 같네요. 아두이노에서 데이터가 오면 그 데이터를 가지고 다시 원그래프를 그리는 식으로 하면 될것 같구요.

      원하는 색을 표현하는 방법은 아래 예시로 코드하나 남겨둘께요. 랜덤으로 RGB 색상을 지정하는 코드인데 조금만 바꾸시면 원하는 색으로 지정하는 코드로 바꾸실 수 있을거에요


      Random random = new Random();
      int color[] = new int[40];
      for(int i=0;i<40;i++){
      color[i] = Color.rgb(random.nextInt(255),random.nextInt(255),random.nextInt(255));
      }

      dataSet.setColors(ColorTemplate.createColors(color));

      PieData data = new PieData((dataSet));
      data.setValueTextSize(10f);
      data.setValueTextColor(Color.YELLOW);

      pieChart.setData(data);

  • 2019.12.13 14:42 신고

    밑에 네모모양에 나라이름 적혀있는거 없애려면 어떻게해야하나요?

    • 2019.12.17 09:33 신고

      https://github.com/PhilJay/MPAndroidChart/wiki/Interaction-with-the-Chart

      여기서 설정해주는 메서드 한번 찾아보세요

Designed by JB FACTORY