2013-05-24 1 views
2

У меня есть следующий график, который я создаю с MigraDoc в моем приложении C#:Различные цвета для значений данных в MigraDoc диаграмме

Chart chart = new Chart(ChartType.Bar2D); 
chart.Width = "10cm"; 
chart.Height = "10cm"; 
Series series = chart.SeriesCollection.AddSeries(); 
series.Add(new double[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }); 
XSeries xseries = chart.XValues.AddXSeries(); 
xseries.Add("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"); 
chart.XAxis.MajorTickMark = TickMarkType.Outside; 
chart.XAxis.Title.Caption = "X-Axis"; 
chart.YAxis.MajorTickMark = TickMarkType.Outside; 
chart.YAxis.HasMajorGridlines = true; 
chart.PlotArea.LineFormat.Color = Colors.AliceBlue; 
chart.PlotArea.LineFormat.Width = 1; 
chart.PlotArea.LineFormat.Visible = true; 
MigraDocObject.Add(chart); 

Теперь давайте говорить, что я хочу быть бар А в Colors.AliceBlue и бар B в Colors.DarkGray. Как я могу это сделать? Возможно ли это через официальный API? Или мне нужно взломать MigraDoc?

ответ

0

Единственный способ, я могу думать, чтобы сделать это, чтобы иметь разные серии для каждого бара, который вы хотите по-разному окрасить. Вам придется немного взломать свои ценности и в значительной степени наложить все ваши бары.

Series seriesA = chart.SeriesCollection.AddSeries(); 
seriesA.Add(new double[] { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); 
seriesA.FillFormat.Color = Colors.AliceBlue; 

Series seriesB = chart.SeriesCollection.AddSeries(); 
seriesB.Add(new double[] { 0, 20, 0, 0, 0, 0, 0, 0, 0, 0 }); 
seriesB.FillFormat.Color = Colors.DarkGray; 

Series seriesC = chart.SeriesCollection.AddSeries(); 
seriesC.Add(new double[] { 0, 0, 30, 0, 0, 0, 0, 0, 0, 0 }); 
seriesC.FillFormat.Color = Colors.Red; 

Просто убедитесь, что каждая новая серия ссылается на один и тот же объект диаграммы. И если вы можете помочь, обязательно включите серию. HasDataLabel = false, чтобы у вас не было значений серии, накладывающихся друг на друга.

В зависимости от размера и сложности диаграммы это должно быть достаточно простым, чтобы скопировать/вставить свой путь через него.

5

мое решение:

Series series = chart.SeriesCollection.AddSeries(); 
series.Add(new double[] { 3, 10, 10, 150, 7, 192, 6 }); 
var elements = series.Elements.Cast<MigraDoc.DocumentObjectModel.Shapes.Charts.Point>().ToArray(); 
elements[0].FillFormat.Color = Colors.Chartreuse; 
elements[3].FillFormat.Color = Colors.DeepSkyBlue;