범례

범례는 각 시리즈가 어떤 정보인지를 표시하는 설명이다. 차트를 구성하는 컬렉션 중 하나이며 디자이너로 차트를 배치하면 Legend[0] 범례를 기본적으로 생성해 놓고 시리즈의 정보를 자동으로 보여 준다. 다음은 범례 실습을 위한 예제이다.

 

private void Form1_Load(object sender, EventArgs e)

{

       chart1.Series[0].Name = "매출";

       chart1.Series.Add("비용");

       chart1.Series.Add("순익");

       Random R = new Random(100);

       double sale = 50;

       double cost = 40;

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

       {

                  sale += R.Next(-4, 5);

                  chart1.Series[0].Points.AddY(sale);

                  cost += R.Next(-4, 5);

                  chart1.Series[1].Points.AddY(cost);

                  chart1.Series[2].Points.AddY(sale - cost);

       }

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

       chart1.Series[1].ChartType = SeriesChartType.Spline;

       chart1.Series[2].ChartType = SeriesChartType.Spline;

       chart1.Series[0].BorderWidth = 2;

       chart1.Series[1].BorderWidth = 2;

       chart1.Series[2].BorderWidth = 3;

       Legend L = chart1.Legends[0];

}

 

세 개의 시리즈를 추가하고 각 시리즈에 매출, 비용, 순익으로 이름을 붙였다. 매출과 비용은 난수로 생성하고 순익은 매출에서 비용을 빼 계산한다.

세 개의 시리즈가 차트에 나타나며 각 색상의 그래프가 무엇인지 설명하는 범례가 차트의 오른쪽 위에 표시되어 있다. 범례의 속성을 바꿔 보기 위해 기본 생성된 범례를 L 변수에 대입해 두었다. 범례는 Legend 클래스의 객체이며 속성은 다음과 같다.

 

속성

설명

Enabled

범례를 보일 것인가 아닌가를 지정한다. 디폴트는 true이며 false로 변경하면 범례를 표시하지 않는다.

Docking

범례를 표시할 변을 지정한다. 디폴트는 오른쪽이며 왼쪽, , 아래로 변경할 수 있다.

Alignment

도킹한 면의 어느 방향으로 정렬할 것인가를 지정한다. 디폴트는 Near이며 수평은 왼쪽, 수직은 위쪽이다. Center는 변의 중앙에, Far는 오른쪽이나 아래쪽에 정렬한다.

Is​Docked​Inside​Chart​Area

도킹 기준이 에리어인지 아니면 전체 차트인지를 지정한다. 디폴트는 false이며 전체 차트 픽처에 도킹된다. 에리어가 여러개일 때만 차이가 발생한다.

Docked​ToChart​Area

에리어 기준으로 도킹할 때 도킹할 에리어의 이름을 지정한다. 디폴트는 빈 문자열이다.

Inside​Chart​Area

범례를 표시하는 에리어의 이름이다.

LegendStyle

항목을 나열하는 방식을 지정한다. Column1열 세로로 나열하고 Row 1행 가로로 나열하고 Table은 임의의 행렬로 도표 형태로 나열한다. 디폴트값은 Table이지만 시리즈가 많지 않으면 1행이나 1열로 보인다.

Legend​Table​Style

테이블 형태로 배치할 때 어느 방향을 기준으로 할 것인가를 지정한다. Tall은 가급적 길게 나열하여 좌우에 도킹할 때 적합하며 Wide는 가급적 넓게 나열하여 상하에 도킹할 때 적합하다. 디폴트는 Auto이며 차트가 알아서 결정한다.

Back​Color

Back​Secondary​Color

Back​Gradient​Style

Back​Hatch​Style

Back​Image

Back​Image​Alignment

Back​Image​Transparent​Color

Back​Image​Wrap​Mode

배경 색상, 무늬, 이미지 등을 지정한다.

다양한 방식으로 배경을 채색할 수 있다.

디폴트 배경색은 흰색이다.

Border​Color

Border​Dash​Style

Border​Width

경계선의 색상, 모양, 굵기를 지정한다. 디폴트가 Empty여서 경계선이 없다.

Font

Fore​Color

문자열의 글꼴과 색상이다.

Is​Text​Auto​Fit

문자열의 크기를 자동으로 조정할 것인가를 지정한다.

Text​Wrap​Threshold

문자열을 자동 개행할 글자수이다. 디폴트는 25이다. 0으로 설정하면 자동 개행하지 않는다.

Maximum​Auto​Size

범례의 최대 크기를 에리어의 비율로 설정한다. 좌우에 도킹할 때는 폭의 최대값이며 상하에 도킹할 때는 높이의 최대값이다.

Title

Title​Alignment

Title​Fore​Color

Title​Back​Color

Title​Font

Title​Separator

Title​Separator​Color

범례의 제목을 지정한다. 디폴트는 None이어서 제목이 없다. 제목 문자열과 글꼴, 색상, 정렬 등을 지정하면 범례 위쪽에 제목이 표시된다.

TitleSeparator 속성은 제목 아래에 표시할 구분자이다. 디폴트는 None이어서 구분자가 없지만 Line, DashLine, DotLine, DoubleLine, GradientLine, ThickLine, ThickGradientLine 등의 속성으로 선을 그을 수 있다.

Header​Separator

Header​Separator​Color

범례 헤더의 구분선을 지정한다.

Interlaced​Rows

Interlaced​Rows​Color

여러 행일 때 교대 배경색을 쓸 것인지를 지정한다.

Is​Equally​Spaced​Items

범례 항목을 균일 간격으로 배치할 것인가를 지정한다. 디폴트는 false이다.

Legend​Item​Order

항목을 순서대로 배치할지 아니면 역순으로 배치할지를 지정한다. 디폴트는 Auto이며 이때는 스택드 타입만 역순으로 표시한다.

Cell​Columns

Legend​Cell​Column 객체의 컬렉션이다.

Custom​Items

시리즈와 상관없이 배치할 수 있는 Legend​Item 객체의 컬렉션이다.

Item​Column​Separator

Item​Column​Separator​Color

Item​Column​Spacing

여러 열일 때 열간의 구분자를 지정한다.

 

속성이 정말 많다. 어느쪽의 어디쯤에 어떤 모양으로 배치할 것인가에 대한 속성부터 알아 보자. 디폴트는 오른쪽에 테이블 형태로 배치하는데 이 속성을 바꿔 보자.

 

L.Docking = Docking.Bottom;

L.Alignment = StringAlignment.Center;

 

이 코드에 의해 범례가 아래쪽으로 이동한다. 디폴트 정렬은 왼쪽이지만 Center로 정렬하면 아래 중앙에 표시된다.

오른쪽에 있을 때는 범례내의 시리즈가 세로로 나열되지만 아래쪽으로 내리면 가로로 나열한다. LegendStyle의 디폴트가 Table이고 LegendTableStyle의 디폴트가 Auto여서 모든 것을 자동으로 결정하기 때문이다. 만약 아래쪽에 세로로 나열하고 싶다면 LegendStyle 속성을 Column으로 변경한다.

다음은 범례의 디자인을 바꿔 보자. 디폴트 디자인은 좀 썰렁할 지경이지만 색상과 선모양을 변경하고 제목을 설정하고 그 사이에 구분선을 집어 넣으면 모양이 많이 바뀐다. 다음 코드를 작성한다.

 

L.BackColor = Color.Silver;

L.BorderColor = Color.Red;

L.BorderWidth = 3;

L.Title = "이달의 실적";

L.TitleBackColor = Color.Yellow;

L.TitleSeparator = LegendSeparatorStyle.DoubleLine;

L.TitleSeparatorColor = Color.Blue;

범례는 컬렉션이므로 필요한만큼 여러 개 배치할 수 있다. Legneds 컬렉션에 새로운 Legend 객체를 추가하고 시리즈의 범례 이름을 변경하면 해당 시리즈의 범례가 변경된다.

 

chart1.Legends.Add("profit");

chart1.Legends[1].Docking = Docking.Left;

chart1.Series[2].Legend = "profit";

 

순익을 표시할 범례를 새로 생성하고 왼쪽에 도킹시켰다. 그리고 2번 순익 시리즈의 범례를 profit으로 지정하면 이 시리즈에 대한 설명이 별도의 범례에 따로 표시된다.

시리즈가 아주 많고 그룹별로 나누어 범례를 작성하고 싶다면 얼마든지 많은 범례를 다양한 형태로 작성하여 원하는 곳에 배치할 수 있다.

범례의 항목은 따로 추가하지 않아도 시리즈로부터 자동으로 생성된다. 위 예제의 경우 세 개의 시리즈로부터 이름과 색상 등을 추출하여 범례에 표시한다. 범례의 문자열을 변경하려면 시리즈의 LegendText 속성을 편집한다. 파이나 도넛 같은 차트는 시리즈가 아닌 데이터 포인터의 이름으로 항목을 만든다.

반면 커스텀 항목은 시리즈나 데이터와는 상관없이 사용자가 범례에 항목을 직접 삽입하는 것이다. LegendItem 객체를 생성한 후 CustomItems 컬렉션에 추가하면 이 항목도 범례에 표시된다. 다음 생성자로 커스텀 항목을 만든다.

 

public LegendItem (string name, System.Drawing.Color color, string image);

 

항목의 이름을 지정하고 색상이나 이미지 중 하나를 지정한다. 둘 다 지정하면 이미지가 우선이다. 다음 코드는 순익의 텍스트를 원하는대로 변경하고 범례에 문자열 항목 하나를 삽입한다.

 

chart1.Series[2].LegendText = "오늘의 수익";

LegendItem li = new LegendItem("오늘도 대박일세", Color.Blue, "");

L.CustomItems.Add(li);

 

순익 시리즈의 이름이 지정한대로 바뀌며 범례 아래쪽에 커스텀 항목도 같이 표시된다.

범례에 꼭 같이 표시하고 싶은 내용이 있으면 커스텀 항목을 이런 식으로 추가한다. 간단한 메모나 정보 등을 표시할 수 있다.