删除额外的 x 轴值
Remove extra x axis values
我在删除 x 列中的额外值时遇到问题。基本上,我的图表不会从 0 开始,也不会在我的最后一个数据点结束。我试过从 0 开始轴,并将间隔偏移设置为 -20(我的间隔是 20)。
有什么方法可以去掉数据两边的额外值吗?
string[] xValues = new string[5] { "QE1", "QE2", "QE3", "QE4", $"{DateTime.Now.ToShortDateString()}" };
PlotBaselines(xValues);
var amCost = new Series()
{
Name = "AmCost",
Color = Color.Blue,
IsVisibleInLegend = true,
IsXValueIndexed = true,
ChartType = SeriesChartType.Line
};
impairmentGraph.Series.Add(amCost);
// Test Values 0 - 20
float[] amCostValues = new float[5] { 5, 15, 20, 13, 6 };
impairmentGraph.Series["AmCost"].Points.DataBindXY(xValues, amCostValues);
这是一个系列的代码。每个都一样。
impairmentGraph.ChartAreas[0].AxisY.Maximum = 100;
impairmentGraph.ChartAreas[0].AxisY.Interval = 20;
impairmentGraph.ChartAreas[0].AxisX.IntervalOffset = -20;
impairmentGraph.ChartAreas[0].AxisX.IsStartedFromZero = true;
这是我使用的唯一设置代码。
您需要设置 x-axis 的 Minimum
和 Maximum
。
但是:如果您已将 x-values 添加为 numbers(或日期时间),这 仅 有效 ! 你的不是!
以下更改会有所帮助:
将 xvalues 更改为数字:
double[] xValues = new double[5] { 1,2,3,4,5 };
将你的标签放在另一个数组中:
string[] xLabels = new string[5] { "QE1", "QE2", "QE3", "QE4",
$"{DateTime.Now.ToShortDateString()}" };
绑定数据后需要为DataPoints
设置AxisLabels
:
for (int i = 0; i < xValues.Length; i++)
impairmentGraph.Series["AmCost"].Points[i].AxisLabel = xLabels[i];
现在您可以设置x-axis显示的范围:
impairmentGraph.ChartAreas[0].AxisX.Minimum = 1;
impairmentGraph.ChartAreas[0].AxisX.Maximum = 5;
根据我的数据,结果如下所示:
请注意,当您将 x-values 添加为 string
时,它们都将 转换为 为 double
,从而得到 [=48] 的值=]0.0d 所有点。 (一定要在调试器中检查!!)因此你不能再将它们用于 anything;不用于设置范围,也不用于格式化标签或用于馈送 Tooltips
等..
首先将字符串输入 AxisLabels
的事实误导了许多人认为一切都很好,但事实并非如此..
另请注意,我总是选择 List 而不是数组,而且这组相当固定的数据并没有真正从数据绑定中获益,尤其是因为我们无论如何都需要访问每个 DataPoint
..
我在删除 x 列中的额外值时遇到问题。基本上,我的图表不会从 0 开始,也不会在我的最后一个数据点结束。我试过从 0 开始轴,并将间隔偏移设置为 -20(我的间隔是 20)。
有什么方法可以去掉数据两边的额外值吗?
string[] xValues = new string[5] { "QE1", "QE2", "QE3", "QE4", $"{DateTime.Now.ToShortDateString()}" };
PlotBaselines(xValues);
var amCost = new Series()
{
Name = "AmCost",
Color = Color.Blue,
IsVisibleInLegend = true,
IsXValueIndexed = true,
ChartType = SeriesChartType.Line
};
impairmentGraph.Series.Add(amCost);
// Test Values 0 - 20
float[] amCostValues = new float[5] { 5, 15, 20, 13, 6 };
impairmentGraph.Series["AmCost"].Points.DataBindXY(xValues, amCostValues);
这是一个系列的代码。每个都一样。
impairmentGraph.ChartAreas[0].AxisY.Maximum = 100;
impairmentGraph.ChartAreas[0].AxisY.Interval = 20;
impairmentGraph.ChartAreas[0].AxisX.IntervalOffset = -20;
impairmentGraph.ChartAreas[0].AxisX.IsStartedFromZero = true;
这是我使用的唯一设置代码。
您需要设置 x-axis 的 Minimum
和 Maximum
。
但是:如果您已将 x-values 添加为 numbers(或日期时间),这 仅 有效 ! 你的不是!
以下更改会有所帮助:
将 xvalues 更改为数字:
double[] xValues = new double[5] { 1,2,3,4,5 };
将你的标签放在另一个数组中:
string[] xLabels = new string[5] { "QE1", "QE2", "QE3", "QE4",
$"{DateTime.Now.ToShortDateString()}" };
绑定数据后需要为DataPoints
设置AxisLabels
:
for (int i = 0; i < xValues.Length; i++)
impairmentGraph.Series["AmCost"].Points[i].AxisLabel = xLabels[i];
现在您可以设置x-axis显示的范围:
impairmentGraph.ChartAreas[0].AxisX.Minimum = 1;
impairmentGraph.ChartAreas[0].AxisX.Maximum = 5;
根据我的数据,结果如下所示:
请注意,当您将 x-values 添加为 string
时,它们都将 转换为 为 double
,从而得到 [=48] 的值=]0.0d 所有点。 (一定要在调试器中检查!!)因此你不能再将它们用于 anything;不用于设置范围,也不用于格式化标签或用于馈送 Tooltips
等..
首先将字符串输入 AxisLabels
的事实误导了许多人认为一切都很好,但事实并非如此..
另请注意,我总是选择 List 而不是数组,而且这组相当固定的数据并没有真正从数据绑定中获益,尤其是因为我们无论如何都需要访问每个 DataPoint
..