2010-08-11 13 views
10

मैं श्रेणी के आधार पर वस्तुओं को दिखाने के लिए एक चार्ट बना रहा हूं। अब तक मैं वॉल्यूम द्वारा आइटम दिखाने में सफल रहा हूं क्योंकि यह एक साधारण एक्स/वाई चार्ट है, हालांकि मैं वाई 2 दिखाना चाहता हूं और मुझे पता है कि एमएस चार्ट कंट्रोल्स एक्सिस 2 में बनाया गया है, हालांकि जब मैं इसके साथ कुछ भी कोशिश करता हूं तो चार्ट प्राप्त होता है सब फंकीएमएस चार्ट नियंत्रण दो वाई एक्सिस

item1 |[][][][][].............| cat1 
item2 |[][]...................| cat2 
item3 |[][....................| cat1 
item4 |[][][][][][][][........| cat1 
     |_______________________| 
     0 1 2 3 4 5 

जैसा कि पहले उल्लेख मैं ठीक है कि अपेक्षाकृत आसान है के रूप में दिखाने के लिए आइटम और मायने रखता है प्राप्त कर सकते हैं की तरह, यह श्रेणियाँ कि मैं नहीं कर पा रहे है:

यहाँ मैं (ascii कला में) के लिए क्या देख रहा हूँ है रखना।

धन्यवाद

उत्तर

5

लघु पहले उत्तर: (प्रदर्शन से वास्तव में अपने मौजूदा क्षेत्र की स्थिति, मिलान एक दूसरे chartArea पर अपने श्रृंखला प्लॉट: एमएस उदाहरण के अनुसार, वहाँ है कि करने के लिए कोई सीधा रास्ता है, लेकिन सिर्फ एक वैकल्पिक हल चाल है आपकी श्रृंखला की एक प्रति) अदृश्य प्राथमिक एक्स/वाई एक्सिस और एक दृश्य माध्यमिक वाई एक्सिस (एक्सिस 2) है। और चार्ट एरिया और कॉपी की गई श्रृंखला के बैककलर्स को पारदर्शी पर सेट करें।

//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; 

पी एस (इस बार स्तंभ रेखांकन बजाय कि के मामले में माध्यमिक एक्स अक्ष के लिए लागू किया जा सकता है): मैं दो रातों जाग खिलवाड़ खर्च किया है एमएस चार्ट नियंत्रण के साथ, एक चार्ट पर दो अलग-अलग Y अक्ष डाल करने के लिए कोशिश कर रहा है क्षेत्र। मैं दो अलग-अलग स्केल किए गए श्रृंखला (एक ही एक्स स्केल, अलग वाई स्केल्स: सीरीज ए के लिए बाईं ओर एक, दूसरा सीरीज बी के दाईं ओर) रखना चाहता था। वास्तव में, यह वास्तविक दुःस्वप्न साबित हुआ, जब कोई इसे बहुत सरल होने की उम्मीद कर सकता था। सच्चाई यह है कि एमएस चार्ट नियंत्रण निश्चित रूप से इस विशेष उपयोग मामले IMHO के लिए अनुकूलित नहीं किए जाते हैं। एमएससीसी नमूना उदाहरणों में सुझाए गए एकाधिक वाई अक्ष नमूना एक भयानक और बहुत बदसूरत कामकाज है, जिसके लिए वांछित प्रभाव प्राप्त करने के लिए दृश्यता और पारदर्शिता के साथ खेलना, डिफ़ॉल्ट के शीर्ष पर दो चार्टरेज़ की आवश्यकता होती है (जो बहुत बुरे भ्रम जादू की तरह लगता है छल)।

हालांकि इस के लिए उम्मीद समृद्ध करने के लिए किया जा और फिक्स्ड भविष्य के संस्करणों में उचित तरीके से, यदि आप वास्तव में कई Y- अक्ष, ZedGraph

+0

मैं आपका नमूना कोशिश कर रहा हूं लेकिन कोई भाग्य नहीं; मुझे वाई धुरी मिलती है लेकिन वे खाली हैं। कोई इनपुट? मुझे लगता है कि यह मेरे लिए दो दिन की चीज में बदल रहा है .. – KTF

+4

समझ गया ... पता चला कि मुझे चार्ट को अतिरंजित करने की आवश्यकता नहीं थी! मुझे बस प्रत्येक श्रृंखला पर YAxisType सेट करने और दूसरे वाई अक्ष को सक्षम करने की आवश्यकता है! – KTF

+1

यह [उत्तर] (http://stackoverflow.com/a/7505750/636676) कार्यान्वित फ़ंक्शन का उपयोग कर दो चार्ट बनाने के बिना समस्या हल करता है। – Freddy

2

समाधान करने के लिए sitck प्रबंधन करने के लिए एक कारगर तरीका की जरूरत है:

chart1.ChartAreas [1] .लाइन करेंथथआर्टएरिया = चार्ट 1। चार्ट एरिया [0] .नाम; चार्ट 1। चार्ट एरिया [1] .लिग्मेंटऑरिएंटेशन = एरिया एलाइनमेंटऑरिएंटेशन। ऑल;

9

यह हो जाता है और भी बेहतर:

दूसरा Y अक्ष का उपयोग कर के लिए, वहाँ एक दूसरे चार्ट क्षेत्र के लिए कोई जरूरत नहीं है। आप प्रति सेरी का निर्णय ले सकते हैं, जिसे आप सीरीज़.एएक्सिस टाइप प्रकार के साथ उपयोग करना चाहते हैं। http://msdn.microsoft.com/en-us/library/dd489216.aspx

पर दस्तावेज़ीकरण को देखें Martijn लो

30
यहाँ

क्या यह मुझ के लिए किया था के बाद मैं चार्ट मैं निम्नलिखित लाइनों जोड़ा बनाया है:

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

आप वाई अक्ष पर जितनी चाहें उतनी श्रृंखला जोड़ सकते हैं, नीचे कोड एक चार्ट से निकाला जाता है जिसका उपयोग 2 से अधिक माध्यमिक वाई अक्ष है, कोड 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() 
संबंधित मुद्दे