Tôi đang hiển thị Biểu đồ cho người dùng có một khu vực biểu đồ có biểu đồ dạng đường. Về điều này, tôi nhận được, ví dụ, một dòng. Dòng này có khoảng 200 giá trị. Tất cả các giá trị đó đều có mô tả (ví dụ: "01.01.2013"
, "05.02.2013"
v.v.).Biểu đồ: Hiển thị mô tả giá trị hơn trên Trục X
Khi biểu đồ được hiển thị, tôi chỉ có thể thấy hai mô tả, ngay cả khi sẽ có không gian để mô tả nhiều hơn nữa. Dòng được hiển thị chính xác, nhưng chỉ có hai điểm được mô tả.
Tôi xoay Văn bản theo chiều dọc để có nhiều không gian hơn, nhưng điều này không hữu ích. Nếu tôi hiển thị ít giá trị hơn (5 hoặc 10), mô tả sẽ hiển thị chính xác.
Đây là cách nó thực sự trông giống như (mô tả thực sự là Chuỗi, không phải Ngày).
Cảm ơn sự giúp đỡ của bạn!
EDIT: Mã của tôi:
chart.ChartAreas(0).AxisY.Maximum = 6
chart.ChartAreas(0).AxisY.Minimum = 1
chart.ChartAreas(0).AxisX.LabelStyle.Angle = -90
chart.Series.Clear()
chart.ChartAreas(0).AxisY.StripLines.Clear()
Dim myStripLine1 as new StripLine()
myStripLine1.IntervalOffset = 4
chart.ChartAreas(0).AxisY.StripLines.add(myStripLine1)
'now adding all series
chart.Series.Add("Chemie") 'just to take the example in the image above
chart.Series(chart.Series.Count - 1).ChartType = DataVisualization.Charting.SeriesChartType.Line
chart.Series(chart.Series.Count - 1).BorderWidth = 4
'now adding quite much values (on every date, every Serie has a value)
chart.Series(chart.Series.Count - 1).Points.AddXY("01.03.2011", 4.9)
Trên mỗi ngày, một điểm mới được nhập cho tất cả các series, nhưng chỉ những điểm mà họ có giá trị quan trọng có được tô đậm. Những giá trị này được tính toán bằng toán học.
Một ví dụ để giải thích điều này: Tôi có hai chuỗi, một có hai giá trị (6 và 4) ở điểm "01.01.2013"
và "03.01.2013"
. Loạt khác có 3 giá trị (4,6,5,5) trên "01.01.2013"
, "02.01.2013"
và "03.01.2013"
. Khi tôi chỉ hiển thị chúng, chuỗi đầu tiên sẽ kết thúc vào ngày thứ hai, ngay cả khi có giá trị cho ngày thứ ba. Tôi đã giải quyết điều này bằng cách điền vào một giá trị giả ở chuỗi đầu tiên với ngày "02.01.2013"
mà chỉ là mức trung bình tại thời điểm này (= 5). Điểm này không được đánh dấu bằng dấu đầu dòng. Đây là cách tôi vẽ đồ thị của mình.
EDIT2:
Sau Skippy's câu trả lời và bình luận, thử nghiệm mới của tôi. Biến MainForm.grades
là một Dictionary(Of Integer,Dictionary(Of String, String))
trong đó có khoảng 150 lớp
Dim subjects As New Dictionary(Of Integer, ArrayList)
Dim allgrades As New ArrayList
For Each grade In MainForm.grades
Dim cD As New Dictionary(Of String, String)
cD.Add("SUBJECTID", grade.Value("SUBJECTID"))
cD.Add("GRADE", grade.Value("GRADE"))
cD.Add("DATE", grade.Value("DATE"))
allgrades.Add(cD)
Next
cht_main.ChartAreas(0).AxisX.IntervalType = DateTimeIntervalType.Days
cht_main.ChartAreas(0).AxisX.LabelStyle.Angle = -90
Dim gradesDateSorter = New gradesDateSorter()
allgrades.Sort(gradesDateSorter)
For Each grade In allgrades
If Not subjects.ContainsKey(Integer.Parse(grade("SUBJECTID"))) Then
subjects.Add(Integer.Parse(grade("SUBJECTID")), New ArrayList)
End If
Dim gradeDict As New Dictionary(Of String, String)
gradeDict.Add("DATE", grade("DATE"))
gradeDict.Add("GRADE", grade("GRADE"))
subjects(Integer.Parse(grade("SUBJECTID"))).Add(gradeDict)
Next
For Each subject In subjects
'adding serie
cht_main.Series.Add(MainForm.subjects(subject.Key)("NAME"))
cht_main.Series(cht_main.Series.Count - 1).ChartType = DataVisualization.Charting.SeriesChartType.Line
cht_main.Series(cht_main.Series.Count - 1).BorderWidth = 4
'cht_main.Series(cht_main.Series.Count - 1).IsXValueIndexed = True
For Each grade In subject.Value
cht_main.Series(cht_main.Series.Count - 1).Points.AddXY(Date.Parse(grade("DATE")), Double.Parse(grade("GRADE")))
Next
Next
Trên hàng cuối cùng 5th tôi nhận xét IsXValueIndexed=True
vì khi tôi kích hoạt nó, biểu đồ được tạo ra với một lỗi chữ thập đỏ lớn.
SOLUTION
Thiết lập Interval trên X-Axis hiện các trick!
chart.ChartAreas(0).AxisX.Interval = 1
Solution bởi Skippy
Bạn đã bao giờ xem xét bên thứ 3 vẽ các thành phần, chẳng hạn như [ZedGraph] (http: // sourcefor ge.net/projects/zedgraph/)? Nhiều khả năng như vậy ít hãy cẩn thận đã được bảo hiểm ở đó. Cho nó một shot! – Neolisk
@yvytty, tôi đã chỉnh sửa câu trả lời của mình bằng mã của mình. –
@Neolisk, tôi đã không thử bởi vì tôi thực sự chỉ sử dụng VB cơ bản và tôi đã cố gắng không sử dụng thư viện, nhưng nếu họ không thừa cân, tôi sẽ cung cấp cho nó một cái nhìn sớm;) –