在图表的 X 轴的点 0 处获取网格线/间隔(灵活的轴缩放)
Getting a Gridline / Interval at point 0 of the X-Axis of a Chart (flexible axis-scaling)
我的图表是这样的:
我可以通过更改图表下方文本框(X-min 和 X-max)中的值来操纵 x 轴的比例。最小值和最大值始终四舍五入为可被 10 整除而无余数的数字。 (858 得到 860,-107 得到 -110)。现在我正在寻找一种解决方案来获得 X 轴刻度,它始终在 X 点“0”处有一条线(图中标记为红色)。
我正在使用 C#。
这是部分代码:
private void textBoxXmax_TextChanged(object sender, EventArgs e)
{
double max, min;
Double.TryParse(this.textBoxXmin.Text, out min);
//checks if the Entering is a double number and if it is greater than the min value
if (Double.TryParse(this.textBoxXmax.Text, out max) && max > chartTest.ChartAreas[0].AxisX.Minimum)
{
max = Math.Round(max / 10) * 10; //round to tens (113->110)
//MessageBox.Show(x.ToString());
this.textBoxXmax.BackColor = Color.White;
chartTest.ChartAreas[0].AxisX.Maximum = max;
//chartCharacteristicCurvesResistanceThermometer.ChartAreas[0].AxisX.Interval = (max-min)/10;
//Problem should be here
//set the YScaleMax
changeYScala(chartTest);
}
else
//if not the textbox is highlighted
this.textBoxXmax.BackColor = Color.Orange;
//double y;
//checks if the Entering is a double number and if it is smaler than the max value
if (Double.TryParse(this.textBoxXmin.Text, out min) && min < chartTest.ChartAreas[0].AxisX.Maximum)
{
min = Math.Round(min / 10) * 10; //round to tens (113->110)
this.textBoxXmin.BackColor = Color.White;
chartTest.ChartAreas[0].AxisX.Minimum = min;
//same calculation for Interval here
changeYScala(chartTest);
}
else
//if not the textbox is highlighted
this.textBoxXmin.BackColor = Color.Orange;
}
您可以使用 chart.ChartAreas[0].AxisX.IntervalOffset
更改间隔的偏移量,另外我通过反复试验发现了这一点,我不知道为什么会这样,但正确的偏移量似乎是:
chart.ChartAreas[0].AxisX.IntervalOffset =
(-chart.ChartAreas[0].AxisX.Minimum) % chart.ChartAreas[0].AxisX.Interval;
此解决方案要求您手动设置 AxisX.Minimum
(如果设置为自动 AxisX.Minimum
returns NaN)。
编辑:还需要您将 chart.ChartAreas[0].AxisX.Interval
设置为 Auto
以外的设置
我的图表是这样的:
我可以通过更改图表下方文本框(X-min 和 X-max)中的值来操纵 x 轴的比例。最小值和最大值始终四舍五入为可被 10 整除而无余数的数字。 (858 得到 860,-107 得到 -110)。现在我正在寻找一种解决方案来获得 X 轴刻度,它始终在 X 点“0”处有一条线(图中标记为红色)。
我正在使用 C#。
这是部分代码:
private void textBoxXmax_TextChanged(object sender, EventArgs e)
{
double max, min;
Double.TryParse(this.textBoxXmin.Text, out min);
//checks if the Entering is a double number and if it is greater than the min value
if (Double.TryParse(this.textBoxXmax.Text, out max) && max > chartTest.ChartAreas[0].AxisX.Minimum)
{
max = Math.Round(max / 10) * 10; //round to tens (113->110)
//MessageBox.Show(x.ToString());
this.textBoxXmax.BackColor = Color.White;
chartTest.ChartAreas[0].AxisX.Maximum = max;
//chartCharacteristicCurvesResistanceThermometer.ChartAreas[0].AxisX.Interval = (max-min)/10;
//Problem should be here
//set the YScaleMax
changeYScala(chartTest);
}
else
//if not the textbox is highlighted
this.textBoxXmax.BackColor = Color.Orange;
//double y;
//checks if the Entering is a double number and if it is smaler than the max value
if (Double.TryParse(this.textBoxXmin.Text, out min) && min < chartTest.ChartAreas[0].AxisX.Maximum)
{
min = Math.Round(min / 10) * 10; //round to tens (113->110)
this.textBoxXmin.BackColor = Color.White;
chartTest.ChartAreas[0].AxisX.Minimum = min;
//same calculation for Interval here
changeYScala(chartTest);
}
else
//if not the textbox is highlighted
this.textBoxXmin.BackColor = Color.Orange;
}
您可以使用 chart.ChartAreas[0].AxisX.IntervalOffset
更改间隔的偏移量,另外我通过反复试验发现了这一点,我不知道为什么会这样,但正确的偏移量似乎是:
chart.ChartAreas[0].AxisX.IntervalOffset =
(-chart.ChartAreas[0].AxisX.Minimum) % chart.ChartAreas[0].AxisX.Interval;
此解决方案要求您手动设置 AxisX.Minimum
(如果设置为自动 AxisX.Minimum
returns NaN)。
编辑:还需要您将 chart.ChartAreas[0].AxisX.Interval
设置为 Auto