我正在尝试抵消我的专业网格和标签样式。当我设置一个间隔时,它工作正常,但是当我尝试抵消该间隔时,我无法让它工作。
绘制图表的数据沿 x 轴有固定点。它们始终相同且对数(不确定是否相关)。
无论我尝试过的 IntervalOffset 值是多少,它总是相同的。我也尝试过设置 IntervalOffsetType 和 Interval 类型(我尝试过的不同内容在代码中显示)。我想要的是标签和主要网格线从 63 开始并每三个点重复一次。
这是一些代码:
包含图表的表单中的代码
private void setupChart()
{
// Setup Chart
chartPathData.Legends[0].Docking = Docking.Bottom;
chartPathData.ChartAreas[0].AxisX.LabelStyle.IntervalOffset = 1;
chartPathData.ChartAreas[0].AxisX.LabelStyle.Interval = 3;
chartPathData.ChartAreas[0].AxisX.LabelStyle.IntervalType = 0;
chartPathData.ChartAreas[0].AxisX.LabelStyle.IntervalOffsetType = 0;
chartPathData.ChartAreas[0].AxisX.MajorGrid.IntervalOffset = 1;
chartPathData.ChartAreas[0].AxisX.MajorGrid.Interval = 3;
chartPathData.ChartAreas[0].AxisX.MajorGrid.IntervalType = DateTimeIntervalType.Number;
chartPathData.ChartAreas[0].AxisX.MajorGrid.IntervalOffsetType = DateTimeIntervalType.Number;
chartPathData.ChartAreas[0].AxisY.Minimum = 0;
chartPathData.ChartAreas[0].AxisY.Maximum = 100;
}
private void GraphPath(Pathdata pathData, string pathName, Color color)
{
var seriesPath = new Series
{
Name = pathName,
IsVisibleInLegend = true,
IsXValueIndexed = true,
Color = color,
ChartType = SeriesChartType.FastLine
};
chartPathData.Series.Add(seriesPath);
// GraphPath just creates a graphable version
// of pathData assigning X values at the corresponding
// properties (creating x,y points)
GraphPath graphPath = new GraphPath(pathData);
foreach (GraphPoint point in graphPath.GraphPoints)
{
seriesPath.Points.AddXY(point.x, point.y);
}
}
DataPath 类
public class DataPath
{
public ThirdOctaveValue A50 { get; set; }
public ThirdOctaveValue A63 { get; set; }
public ThirdOctaveValue A80 { get; set; }
public ThirdOctaveValue A100 { get; set; }
public ThirdOctaveValue A125 { get; set; }
public ThirdOctaveValue A160 { get; set; }
public ThirdOctaveValue A200 { get; set; }
public ThirdOctaveValue A250 { get; set; }
public ThirdOctaveValue A315 { get; set; }
public ThirdOctaveValue A400 { get; set; }
public ThirdOctaveValue A500 { get; set; }
public ThirdOctaveValue A630 { get; set; }
public ThirdOctaveValue A800 { get; set; }
public ThirdOctaveValue A1000 { get; set; }
public ThirdOctaveValue A1250 { get; set; }
public ThirdOctaveValue A1600 { get; set; }
public ThirdOctaveValue A2000 { get; set; }
public ThirdOctaveValue A2500 { get; set; }
public ThirdOctaveValue A3150 { get; set; }
public ThirdOctaveValue A4000 { get; set; }
public ThirdOctaveValue A5000 { get; set; }
}
这是结果
正确,
Axis.IntervalOffset()
属性没有效果。研究公共 .net 源代码表明,除了其自己的赋值和检索之外,该参数没有在任何地方被引用。
使用
IntervalOffset
和 Minimum
参数设置 Interval
的任何解决方案都会隐式设置轴的零点,而无需设置参数。然而,只有在 Axis
内部完成最小值自动计算后才能完成此操作。一旦手动设置了一次最小值,自动计算就会停止,需要手动重新计算。添加或删除数据需要执行以下操作,假设相关图表为 Chart1
,ChartArea
的索引为零,感兴趣的轴为 AxisX
,并且轴'.Interval 已设置为非零值.:
With Chart1.ChartAreas(0)
.AxisX.Minimum = Double.NaN
.Recalculate()
.AxisX.Minimum = .AxisX.Interval * System.Math.Floor(.AxisX.Minimum / .AxisX.Interval)
End With
第一行将
Minimum
重置为非固定值(Double.NaN);第二行强制轴根据显示的数据重新计算其精确边界;第三个设置 Minimum
等于间隔的整数倍,位于数据精确最小值的左侧(或数字下方)。
这样做时,轴按指定间隔间隔,以间隔的整数倍间隔,超出数据限制。严格来说,这并没有设置最大值,允许浮动到数据的精确最大值,因此为了完整性可以执行以下操作:
With Chart1.ChartAreas(0)
.AxisX.Minimum = Double.NaN
.AxisX.Maximum = Double.NaN
.Recalculate()
.AxisX.Minimum = .AxisX.Interval * System.Math.Floor(.AxisX.Minimum / .AxisX.Interval)
.AxisX.Maximum = .AxisX.Interval * System.Math.Ceiling(.AxisX.Maximum / .AxisX.Interval)
End With
这设置了两端,现在轴的行为就像 Y 轴本身对数据的行为一样。