2010-08-11 5 views
10

나는 카테고리별로 볼륨별로 항목을 표시하는 차트를 작성하고 있습니다. 지금까지 나는 단순한 x/y 차트이므로 볼륨별로 항목을 표시하는 데 성공했습니다. 그러나 y2를 보여주고 싶습니다. MS Chart Controls에는 AxisY2가 내장되어 있습니다. 그러나 Chart에서 get 모두 펑키.MS 차트 컨트롤 두 Y 축

이전에 내가 그 비교적 쉽게로 잘 보여 항목 및 수를 얻을 수 있습니다 언급처럼
item1 |[][][][][].............| cat1 
item2 |[][]...................| cat2 
item3 |[][....................| cat1 
item4 |[][][][][][][][........| cat1 
     |_______________________| 
     0 1 2 3 4 5 

, 그것은 내가 보일 수없는 카테고리입니다 : 여기

내가 (아스키 아트에서) 무엇을 찾고 있어요입니다 놓기.

감사

답변

5

첫째 짧은 답변 : MS 예에 따르면,이를 위해 어떤 직선 방법, 그러나 다만 해결 트릭이 없다 : 정확하게 기존 영역의 위치를 ​​일치하는 두 번째 chartArea에 플롯하여 일련의 (수행하여 눈에 보이지 않는 1 차 X/Y 축과 눈에 보이는 2 차 Y 축 (AxisY2)이있는 일련의 사본입니다. 그리고 chartArea와 복사 된 시리즈의 backcolors를 투명하게 설정하십시오.

//Suppose you already have a ChartArea with the series plotted and the left Y Axis 
//Add a fake Area where the only appearent thing is your secondary Y Axis 
ChartArea area1 = chart.ChartAreas.Add("ChartAreaCopy_" + series.Name); 
area1.BackColor = Color.Transparent; 
area1.BorderColor = Color.Transparent; 
area1.Position.FromRectangleF(area.Position.ToRectangleF()); 
area1.InnerPlotPosition.FromRectangleF(area.InnerPlotPosition.ToRectangleF()); 
area1.AxisX.MajorGrid.Enabled = false; 
area1.AxisX.MajorTickMark.Enabled = false; 
area1.AxisX.LabelStyle.Enabled = false; 
area1.AxisY.MajorGrid.Enabled = false; 
area1.AxisY.MajorTickMark.Enabled = false; 
area1.AxisY.LabelStyle.Enabled = false; 

area1.AxisY2.Enabled = AxisEnabled.True; 
area1.AxisY2.LabelStyle.Enabled = true; 

// Create a copy of specified series, and change Y Values to categories 
Series seriesCopy = chart.Series.Add(series.Name + "_Copy"); 
seriesCopy.ChartType = series.ChartType; 
foreach(DataPoint point in series.Points) 
{ 
    double category = getYourItemCategory(point.XValue); 
    seriesCopy.Points.AddXY(point.XValue, category); 
} 

// Hide copied series 
seriesCopy.IsVisibleInLegend = false; 
seriesCopy.Color = Color.Transparent; 
seriesCopy.BorderColor = Color.Transparent; 

//Drop it in the chart to make the area show (only the AxisY2 should appear) 
seriesCopy.ChartArea = area1.Name; 

PS (이 칼럼 그래프 오히려 그 바의 경우 보조 X 축에 적용 할 수 있습니다) : 나는 차트에 두 개의 서로 다른 Y 축 넣어 시도, MS 차트 컨트롤이 밤 깨어 메싱을 보냈어요 지역. 저는 두 가지 다르게 스케일 된 시리즈 (동일한 X 스케일, 다른 Y 스케일 : 시리즈 A의 왼쪽에 하나, 시리즈 B의 오른쪽에 다른 하나)를 넣고 싶습니다. 실제로, 이것은 실제 악몽 인 인 것으로 밝혀졌으며, 이것이 꽤 직설적이라고 예상 할 수 있습니다. 사실 MS 차트 컨트롤은이 특정 사용 사례에 맞지 않습니다. IMHO. MSCC 샘플 예제에서 제안 된 여러 Y 축 샘플은 끔찍하고 아주 못생긴 해결 방법입니다. 원하는 효과를 얻으려면 가시성과 투명성으로 노는 기본 차트 위에 두 개의 차트 영역이 필요합니다 (매우 나쁜 환상 마법처럼 들립니다 장난).

chart1.ChartAreas : 당신이 정말로 여러 Y 축, ZedGraph

+0

나는 행운을 시험해보고있다. 나는 y 축을 얻지 만 그들은 비어 있습니다. 어떤 입력? 나는 이것이 나에게 2 일간의 일로 바뀌고있는 것처럼 느낀다 .. – KTF

+4

알았어 ... 나는 차트를 슈퍼 임 포즈 할 필요가 없다는 것을 알았다. 각 시리즈에 YAxisType을 설정하고 두 번째 Y 축을 활성화해야했습니다. – KTF

+1

이 [대답] (http://stackoverflow.com/a/7505750/636676) 구현 된 함수를 사용하여 두 차트를 만들지 않고 문제를 해결합니다. – Freddy

2

솔루션에 sitck을 효율적으로 관리 할 필요하면

이 바라고있는 동안은, 향후 버전에 적절한 방법으로 농축 고정합니다 [1] .AlignWithChartArea = chart1.ChartAreas [0] .Name; chart1.ChartAreas [1] .AlignmentOrientation = AreaAlignmentOrientations.All;

9

그것은 더 나은됩니다 :

두 번째 Y 축을 사용하기 위해, 두 번째 차트 영역에 대한 필요가 없습니다. Series.YAxisType 속성과 함께 사용할 축을 세 릴당 결정할 수 있습니다. 마티에게 http://msdn.microsoft.com/en-us/library/dd489216.aspx

에 대한 설명서를 살펴 보자

다음
30

내가 다음 줄을 추가 한 차트를 만든 후 ME-그것을 무슨 짓을했는지 두 가지를 중첩 할 필요가 없었다

chrtMain.Series[0].YAxisType = AxisType.Primary; 
chrtMain.Series[1].YAxisType = AxisType.Secondary; 

chrtMain.ChartAreas[0].AxisY2.LineColor = Color.Transparent; 
chrtMain.ChartAreas[0].AxisY2.MajorGrid.Enabled = false; 
chrtMain.ChartAreas[0].AxisY2.Enabled = AxisEnabled.True; 
chrtMain.ChartAreas[0].AxisY2.IsStartedFromZero = chrtMain.ChartAreas[0].AxisY.IsStartedFromZero; 

차트 또는 아무것도!

+0

나를 위해 일했습니다! 감사 –

3

원하는만큼 Y 축에 시리즈를 추가 할 수 있습니다. 아래 코드는 2 차 이상의 y 축이 있고, 코드는 vb를 사용하는 차트에서 추출한 것입니다.그물 그러나 나는 당신이 그것을 해결할 수있을거야 :

 ChartKPI.Series.Clear() 

     ChartKPI.Series.Add("Series1") 
     ChartKPI.Series("Series1").XValueMember = "Date" 
     ChartKPI.Series("Series1").YValueMembers = "HSDPA_Vol_MBy" 
     ChartKPI.Series("Series1").Name = "HSDPA_Vol_MBy" 
     ChartKPI.Series("HSDPA_Vol_MBy").ChartType = SeriesChartType.Column 
     ChartKPI.Series("HSDPA_Vol_MBy").ToolTip = "HSDPA MBytes: #VAL" 

     ChartKPI.Series.Add("Series2") 
     ChartKPI.Series("Series2").YAxisType = AxisType.Secondary 
     ChartKPI.Series("Series2").XValueMember = "Date" 
     ChartKPI.Series("Series2").YValueMembers = "cs_voice_traffic" 
     ChartKPI.Series("Series2").Name = "cs_voice_traffic" 
     ChartKPI.Series("cs_voice_traffic").ChartType = SeriesChartType.Line 
     ChartKPI.Series("cs_voice_traffic").BorderWidth = 3 
     ChartKPI.Series("cs_voice_traffic").ToolTip = "CS Voice Traffic: #VAL" 

     ChartKPI.Series.Add("Series3") 
     ChartKPI.Series("Series3").YAxisType = AxisType.Secondary 
     ChartKPI.Series("Series3").XValueMember = "Date" 
     ChartKPI.Series("Series3").YValueMembers = "cs_conv_traffic" 
     ChartKPI.Series("Series3").Name = "cs_conv_traffic" 
     ChartKPI.Series("cs_conv_traffic").ChartType = SeriesChartType.Line 
     ChartKPI.Series("cs_conv_traffic").BorderWidth = 3 
     ChartKPI.Series("cs_conv_traffic").ToolTip = "CS Conv Traffic: #VAL" 

     ChartKPI.Series.Add("Series4") 
     ChartKPI.Series("Series4").YAxisType = AxisType.Secondary 
     ChartKPI.Series("Series4").XValueMember = "Date" 
     ChartKPI.Series("Series4").YValueMembers = "ps_backg_traffic_ul" 
     ChartKPI.Series("Series4").Name = "ps_backg_traffic_ul" 
     ChartKPI.Series("ps_backg_traffic_ul").ChartType = SeriesChartType.Line 
     ChartKPI.Series("ps_backg_traffic_ul").BorderWidth = 3 
     ChartKPI.Series("ps_backg_traffic_ul").ToolTip = "PS Backg Traffic UL: #VAL" 

     ChartKPI.Series.Add("Series5") 
     ChartKPI.Series("Series5").YAxisType = AxisType.Secondary 
     ChartKPI.Series("Series5").XValueMember = "Date" 
     ChartKPI.Series("Series5").YValueMembers = "ps_backg_traffic_dl" 
     ChartKPI.Series("Series5").Name = "ps_backg_traffic_dl" 
     ChartKPI.Series("ps_backg_traffic_dl").ChartType = SeriesChartType.Line 
     ChartKPI.Series("ps_backg_traffic_dl").BorderWidth = 3 
     ChartKPI.Series("ps_backg_traffic_dl").ToolTip = "PS Backg Traffic DL: #VAL" 

     ChartKPI.ChartAreas("ChartArea1").AxisX.Title = "HSDPA Traffic (MB)" 
     ChartKPI.ChartAreas("ChartArea1").AxisX.MajorGrid.Interval = 1 
     ChartKPI.ChartAreas("ChartArea1").AxisX.LabelStyle.Interval = 1 
     ChartKPI.ChartAreas("ChartArea1").AxisY.Title = "RRC Attempts" 
     ChartKPI.ChartAreas("ChartArea1").AxisY2.Title = "R99 Traffic (Erlang)" 

     ChartKPI.DataBind()