我在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
中的栏A和Colors.DarkGray
中的栏B.我怎么能做到这一点?是否可以通过官方API?或者我是否必须攻击MigraDoc?
答案 0 :(得分: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;
答案 1 :(得分: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,这样你就不会让你的系列值相互叠加。
根据图表的大小和复杂程度,这应该很容易复制/粘贴您的方式。