마커와 레이블

다음은 시리즈의 마커 관련 속성이다. 마커는 각 데이터 포인터의 위치를 나타내는 장식이다. Spline처럼 곡선 차트는 포인트 지점이 명확히 보이지 않으므로 마커를 달아 주면 시인성이 향상된다.

 

속성

설명

MarkerStyle

어떤 마커를 배치할 것인지를 지정한다. 디폴트는 None이며 Circle, Cross, Diamond, Square, Star4, Star5, Star6, Star10, Triangle 등이 있다.

MarkerColor

마커의 색상을 지정한다. 생략시 시리즈의 색상을 따른다.

MarkerSize

마커의 크기를 지정한다.

MarkerStep

마커의 주기를 지정한다. 디폴트는 1이어서 모든 포인트에 표시되지만 2로 지정하면 하나씩 건너뛴다.

MarkerImage

마커로 사용할 이미지 이름이다.

MarkerImageTransparentColor

이미지의 투명 색상이다.

MarkerBorderColor

마커의 경계선 색상이다.

MarkerBorderWidth

마커의 경계선 두께이다.

 

앞에서 실습한 그리기 속성은 모두 제거하고 다음 코드로 두 시리즈의 마커를 지정해 보자.

 

chart1.Series[0].MarkerStyle = MarkerStyle.Circle;

 

chart1.Series[1].MarkerStyle = MarkerStyle.Star5;

chart1.Series[1].MarkerStep = 3;

chart1.Series[1].MarkerSize = 15;

chart1.Series[1].MarkerColor = Color.Lime;

chart1.Series[1].MarkerBorderColor = Color.Red;

chart1.Series[1].MarkerBorderWidth = 2;

 

라인 시리즈에는 Circle 마커만 배치했다. 밋밋한 선에 비해 강조점이 있어 훨씬 더 보기 좋다. 색상을 지정하지 않으면 시리즈와 같은 색을 사용하는데 약간 더 짙은 색으로 지정하면 더 보기 좋다.

컬럼 시리즈에는 별 마커를 배치하고 여러 가지 속성을 주었다. 3칸마다 마커를 표시하고 크기를 15픽셀로 키웠다. 안쪽은 연두색으로 채색하고 경계선은 두께 2의 빨간색으로 둘렀다. 좀 유치하지만 이런 장식도 가능하다.

그리기 속성은 차트의 객체 계층에 대부분 존재한다. 위쪽 계층에서 지정한 속성은 아래쪽 계층으로 자동 상속되어 일괄 적용된다. Series에는 데이터 포인터의 컬렉션인 Points가 있고 그 안에 DataPoint가 있다. 시리즈에 적용한 속성은 데이터 포인터에도 일괄 적용된다.

만약 하위 계층에서 상위의 그리기 속성을 무시하고 따로 속성을 지정하면 이때는 상위 계층의 속성을 상속받지 않고 직접 지정한 속성이 우선 적용된다. 다음 코드를 추가해 보자.

 

chart1.Series[0].MarkerColor = Color.Blue;

chart1.Series[0].Points[10].MarkerColor = Color.Red;

chart1.Series[0].Points[10].MarkerSize = 10;

 

chart1.Series[1].Points[3].Color = Color.Blue;

chart1.Series[1].Points[3].MarkerStyle = MarkerStyle.Diamond;

chart1.Series[1].Points[3].MarkerColor = Color.Yellow;

 

시리즈에 마커 속성을 설정하면 모든 포인트에 일괄 적용된다. 그러나 한 포인트만 특별하게 그리고 싶다면 해당 포인터의 마커 속성만 변경하면 된다. 라인 차트의 마커 색상을 파란색으로 지정하면 모든 포인트의 마커가 파랗지만 10번째 포인트에 대해서만 빨간색의 원 모양으로 지정했다. 나홀로 다른 모양이어서 확실히 강조된다.

컬럼 시리즈도 3번 포인트만 파란색으로 변경하고 노란색의 다이아몬드 마커로 변경했다. 보다시피 지정한 포인트만 원하는 형태로 바꿀 수 있다. , 이 경우도 포인트가 지정하지 않은 속성은 상위 계층에서 상속 받는다. 컬럼 시리즈의 3번 포인트는 경계선을 따로 지정하지 않아 시리즈에서 적용한 빨간색 2픽셀이 그대로 적용되었다.

시리즈와 데이터 포인트의 관계 뿐만 아니라 차트에서 계층을 이루는 대부분의 객체가 이 규칙을 따른다. 항상 상위 객체의 속성이 하위로 일괄 전파되어 통일된 모양을 쉽게 만들 수 있다. 특별히 튀고 싶은 녀석만 속성을 원하는대로 따로 지정하면 된다.

레이블은 차트 곳곳에 표시되는 문자열인데 시리즈의 Label 관련 속성은 데이터 포인트 근처에 표시하는 텍스트를 지정한다. 속성은 다음과 같다.

 

속성

설명

Label

레이블에 표시할 문자열이다. 상수 문자열을 쓸 수도 있고 키워드를 쓸 수도 있다.

LabelForeColor

레이블의 문자열 색상이다.

LabelBackColor

레이블 문자열의 배경색이다.

LabelBorderColor

LabelBorderWidth

LabelBorderDashStyle

레이블의 경계선이다.

LabelFormat

레이블의 출력 포맷을 지정한다.

LabelAngle

레이블의 각도이다. -90 ~ 90까지 지정한다.

 

레이블에 문자열 상수를 표시할 수도 있지만 모든 데이터 포인트에 굳이 같은 문자열을 표시할 이유는 없다. 주로 키워드를 사용하여 특정값을 가져오는 식을 기술한다. 키워드 종류는 다음과 같다. 레이블 뿐만 아니라 툴팁, , 범례 등 텍스트를 표시하는 여로 곳에 공통적으로 사용한다.

 

키워드

설명

#VALX

X축의 값이다.

#VAL

Y축의 값이다. 여러 개의 Y값을 가진 시리즈는 #VALY, #VALY2, #VALY3, #VALY4 등으로 이름을 붙인다.

#SERIESNAME

시리즈의 이름이다.

#LABEL

데이터 포인트의 레이블이다.

#AXISLABEL

축의 레이블이다.

#INDEX

데이터 포인터의 순서값이다.

#PERCENT

Y값의 퍼센트 비율이다.

#TOTAL, #AVG, #MIN, #MAX

Y값의 총합, 평균, 최소, 최대값이다.

#FIRST, #LAST

Y, 마지막 Y값이다.

 

다음 예제로 데이터 포인트 위에 레이블을 표시해 보자.

 

private void Form1_Load(object sender, EventArgs e)

{

       chart1.Legends[0].Enabled = false;

       Random R = new Random(100);

       double value = 30;

       for (int i = 0; i < 10; i++)

       {

                  value += R.Next(-9, 10);

                  chart1.Series[0].Points.AddXY(i, value);

       }

       chart1.Series[0].ChartType = SeriesChartType.Line;

 

       chart1.Series[0].Label = "#VALX:#VAL";

       chart1.Series[0].LabelForeColor = Color.Red;

       chart1.Series[0].LabelBackColor = Color.Yellow;

       chart1.Series[0].LabelBorderColor = Color.Black;

       chart1.Series[0].LabelAngle = -90;

}

 

노란색 사각형안에 X축의 값과 Y축의 값이 같이 표시된다. 축으로 시선이 이동하지 않아도 레이블만으로 값을 알아볼 수 있어 편리하다. 키워드를 바꾸면 전체에 대한 비율이나 평균, 총합 등을 레이블에 표시할 수 있다.