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:
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:
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.
This is possible by adding a custom label for every x value, so for each year.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With