MigraDoc图表中数据值的不同颜色
本文关键字:颜色 数据 MigraDoc | 更新日期: 2023-09-27 18:15:05
我在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
中的bar A和Colors.DarkGray
中的bar B。我怎么才能做到呢?是否可以通过官方API实现?还是我必须破解MigraDoc?
我的解决方案:
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;
我能想到的唯一方法是为每个想要不同颜色的栏设置不同的系列。你必须稍微修改一下你的值,并且几乎覆盖所有的条形图。
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,这样你就不会让你的序列值相互重叠。
根据图表的大小和复杂程度,这应该很容易复制/粘贴。