C# x 轴上的自定义标签
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18911908/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
custom label on x-axis
提问by MrFox
My chart predicts a value for the next 30 years. The first value must be displayed as year 1. Then year 5, 10... until 30. But internally the first year is 0 and is left off:
我的图表预测了未来 30 年的价值。第一个值必须显示为第 1 年。然后是第 5 年、第 10 年...直到 30 年。但在内部,第一年是 0 并且被忽略:
I tried adding a custom label, but it only breaks the other labels:
我尝试添加自定义标签,但它只会破坏其他标签:
If I add it to AxisX2 instead of AxisX it does nothing. Here is the code to make the chart and add the lines:
如果我将它添加到 AxisX2 而不是 AxisX 它什么都不做。这是制作图表并添加线条的代码:
public static Chart MakeChart(string title)
{
var chart = new Chart();
var area = new ChartArea("GrafiekGebied");
foreach (var axis in area.Axes)
{
axis.TitleForeColor = defaultColor;
axis.LineColor = defaultColor;
axis.InterlacedColor = defaultColor;
axis.LabelStyle.Font = letterType;
axis.LabelAutoFitMinFontSize = (int)letterType.Size;
axis.LabelAutoFitMaxFontSize = (int)letterType.Size;
axis.MajorGrid.LineColor = defaultColor;
axis.MajorTickMark.Enabled = false;
axis.MinorGrid.LineColor = defaultColor;
axis.MinorTickMark.LineColor = defaultColor;
}
CustomLabel firstXlabel = new CustomLabel();
firstXlabel.FromPosition = 0;
firstXlabel.ToPosition = 0;
firstXlabel.RowIndex = 0; // Also tried 1
firstXlabel.Text = "1jr";
area.AxisY.LineWidth = 0;
area.AxisY.LabelStyle.Format = "{#,##}";
area.AxisX.TextOrientation = TextOrientation.Horizontal;
area.AxisX.CustomLabels.Add(firstXlabel); // Adding it to AxisX2 does nothing
area.AxisX.IsMarginVisible = true;
area.AxisX.MajorGrid.Enabled = false;
area.AxisX.IntervalOffset = 1;
area.AxisX.LabelStyle.Format = "{#}jr";
area.AxisX.MajorTickMark.Enabled = true;
area.AxisX2.LineWidth = 1;
area.AxisX2.LineColor = Color.Green;
var legend = new Legend();
legend.LegendStyle = LegendStyle.Row;
legend.Docking = Docking.Bottom;
legend.DockedToChartArea = area.Name;
legend.Font = lettering;
legend.IsDockedInsideChartArea = false;
chart.ForeColor = defaultColor;
chart.Font.Name = lettering.FontFamily.Name;
chart.Font.Size = new System.Web.UI.WebControls.FontUnit(lettering.Size);
chart.Width = 280;
chart.Height = 180;
chart.Legends.Add(legend);
chart.ChartAreas.Add(area);
chart.BorderlineColor = defaultColor;
chart.BorderlineWidth = 1;
chart.BorderlineDashStyle = ChartDashStyle.Solid;
chart.Titles.Add(title);
return chart;
}
public static void AddData(Chart chart, ChartInput input)
{
var line = new Series(input.Subtitle);
line.ChartArea = chart.ChartAreas[0].Name;
line.ChartType = SeriesChartType.Spline;
line.Color = input.Color;
line.BorderWidth = 3;
line.MarkerStyle = MarkerStyle.Circle;
line.MarkerSize = 7;
line.MarkerStep = 5;
for (int i = 0; i < input.Waarden.Length; i++)
{
line.Points.AddXY(i, input.Values[i]);
}
chart.Series.Add(line);
}
After making the graph it's inserted in a word document using Aspose, but that should not matter for how the chart is made.
制作图表后,它会使用 Aspose 插入到 Word 文档中,但这与图表的制作方式无关。
回答by Stefan Orie
This is possible by adding a custom label for every x value, so for each year.
这可以通过为每个 x 值添加自定义标签来实现,因此对于每年。
Dim series1 As New Series("Series1")
series1.ChartType = SeriesChartType.Column
' Adding some points
series1.Points.AddXY(1, 1)
series1.Points.AddXY(2, 1)
series1.Points.AddXY(3, 1)
Chart1.Series.Add(series1)
' I manually set the maxium of the X axis
Chart1.ChartAreas("ChartArea1").AxisX.Interval = 1
Chart1.ChartAreas("ChartArea1").AxisX.Maximum = 4
Chart1.ChartAreas("ChartArea1").AxisX.CustomLabels.Add(0.5, 1.5, "yr1")
Chart1.ChartAreas("ChartArea1").AxisX.CustomLabels.Add(1.5, 2.5, "yr2")
Chart1.ChartAreas("ChartArea1").AxisX.CustomLabels.Add(2.5, 3.5, "yr3")
If a point has a x-value of '1', then you should add the customlabel from '0.5' to '1.5'. That way it centers nicely.
如果一个点的 x 值为“1”,那么您应该将自定义标签从“0.5”添加到“1.5”。这样它就可以很好地居中。