我有对数刻度(两轴)在Visual Studio 2015(C#)与MS图表创建的曲线图(见图)。
我需要在x轴添加更多的网格线和相应的标签。 我希望标记之间的每个次要刻度1(2,3,4 ...)和10和10和100之间(20,30,40 ...)和,另外,我想例如10之间添加网格线20。
我用的时间间隔1
在图表的坐标轴特性的标签,但没有奏效。
我有对数刻度(两轴)在Visual Studio 2015(C#)与MS图表创建的曲线图(见图)。
我需要在x轴添加更多的网格线和相应的标签。 我希望标记之间的每个次要刻度1(2,3,4 ...)和10和10和100之间(20,30,40 ...)和,另外,我想例如10之间添加网格线20。
我用的时间间隔1
在图表的坐标轴特性的标签,但没有奏效。
在添加一个点在一个非零的x值或设置后(!) chart.SuppressExceptions = true
,你可以使用这些属性为Chartarea ca
:
ca.AxisX.IsLogarithmic = true;
ca.AxisX.LogarithmBase = 10;
// with 10 as the base it will go to 1, 10, 100, 1000..
ca.AxisX.Interval = 1;
// this adds 4 tickmarks into each interval:
ca.AxisX.MajorTickMark.Interval = 0.25;
// this add 8 gridlines into each interval:
ca.AxisX.MajorGrid.Interval = 0.125;
// this sets two i.e. adds one extra label per interval
ca.AxisX.LabelStyle.Interval = 0.5;
ca.AxisX.LabelStyle.Format = "#0.0";
更新:
既然你不希望有自动标签(它总是由值一致),你需要添加CustomLabels
。
为此,您需要设置你想要的标签,以显示位置/值的列表:
// pick a better name!
List<double> xs = new List<double>() { 1, 2, 3, 4, 5, 10, 20, 50, 100, 200, 500, 1000};
接下来,我们需要分配一个FromPosition
和ToPosition
每个CustomLabel
我们创造。 这始终是一个有点棘手,但这里比平常更..
这两个值需要足够远间隔,以允许标签,以适应。所以我们挑选的间隔因素:
double spacer = 0.9d;
而且我们还可以关闭自动装配机制:
ca.AxisX.IsLabelAutoFit = false;
现在,我们可以添加CustomLabels
:
for (int i = 0; i < xs.Count; i++)
{
CustomLabel cl = new CustomLabel();
if (xs[i] == 1 || xs[i] <= 0)
{
cl.FromPosition = 0f;
cl.ToPosition = 0.01f;
}
else
{
cl.FromPosition = Math.Log10(xs[i] * spacer);
cl.ToPosition = Math.Log10(xs[i] / spacer);
}
cl.Text = xs[i] + "";
ca.AxisX.CustomLabels.Add(cl);
}
正如你所看到的,我们需要计算使用的值Log10
被应用到功能Axis
,而不是通过增加和间距乘以/除以间隔来实现的。 间距值也必须由LOG10缩放并且被包括在功能。
我们还需要采取的值的情况下的护理1
,即达的标签位置0
; 但乘/除它时,这不会导致任何间隔。 因此,我们设定一个合适的ToPosition
手动。
我希望我知道的更简单的方法来做到这一点,但由于标签位置的名单是真的你的选择,我怀疑有短切..
我在40和50加分,以显示如何一个标签匹配。还请注意标签位置如何好坏参半。 随意使用你的!