C# 在对数刻度MS图表(对数)中显示刻度标签

C# 在对数刻度MS图表(对数)中显示刻度标签,c#,charts,.net-4.5,mschart,C#,Charts,.net 4.5,Mschart,我在Visual Studio 2015(C#)中使用MS图表创建了一个带有对数刻度(两个轴)的绘图(见图) 我需要在x轴上添加更多网格线和相应的标签。我想标记1(2,3,4…)和10之间以及10和100(20,30,40…)之间的每个小勾号,并且我想在例如10和20之间添加网格线。 我在图表的轴属性中使用了1间隔作为标签,但它不起作用 在(!)在非零x值处添加点后或设置chart.SuppressExceptions=true您可以将这些属性用于图表区域ca: ca.AxisX.IsLogar

我在Visual Studio 2015(C#)中使用MS图表创建了一个带有对数刻度(两个轴)的绘图(见图)

我需要在x轴上添加更多网格线和相应的标签。我想标记1(2,3,4…)和10之间以及10和100(20,30,40…)之间的每个小勾号,并且我想在例如10和20之间添加网格线。

我在图表的轴属性中使用了
1
间隔作为标签,但它不起作用

在(!)在非零x值处添加点后或设置
chart.SuppressExceptions=true
您可以将这些属性用于
图表区域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};
我们还关闭了自动装配机构:

    ca.AxisX.IsLabelAutoFit = false;
现在我们可以添加
自定义标签

    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);

    }
for(int i=0;i设置
chart.SuppressExceptions=true
后(xs[i]==1 | | xs[i],则可以将这些属性用于
图表区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};
我们还关闭了自动装配机构:

    ca.AxisX.IsLabelAutoFit = false;
现在我们可以添加
自定义标签

    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);

    }
for(int i=0;iif(xs[i]==1 | | xs[i]你能给我们提供你尝试过的代码吗?你设置的间隔是多少?你可以设置多个间隔。有一个用于图表区域X轴,一个用于主刻度,一个用于次刻度,等等。能够看到你的代码将帮助你获得更多答案。请看,请看。我认为他们可能有一个解决方案回答你的问题。你能给我们提供你尝试过的代码吗?你设置的间隔是多少?你可以设置多个间隔。有一个用于图表区域X轴,一个用于主刻度,一个用于次刻度,等等。能够看到你的代码将帮助你获得更多答案。请看,请看。我想他们可能对你的问题有一个解决方案。当然有,你只要看看就知道了!屏幕截图是代码的结果!你可能知道,对数刻度中刻度线或网格线之间的间距并不像你的数字那样是线性的。我需要加上1到10:1.1、1.2、1.3、1.4、1.5、1.6…1.9(不是3.2)我的图中的刻度不是按值线性的,而是按位置线性的。你从来没有说过你想让下摆按值线性。当然,设置一个间隔是不可能的。相反,你需要在需要的地方逐个添加自定义标签。-你显示的图表有非线性刻度。你想添加实验室的是真的图表吗els to?是的,这是用MS Chars生成的图表。我想在两者之间添加刻度(例如10到11之间)…当然,这是一个比自定义标签更简单的版本…好吧,我添加了一个如何添加自定义标签的示例。你应该能够像那样创建所有你想要的标签…当然可以,你只要看一下就知道了!屏幕截图是代码的结果!正如你可能知道的,刻度线或网格线之间的间距为n我需要在1和10之间加上:1.1,1.2,1.3,1.4,1.5,1.6…1.9(不是3.2)我的图中的刻度不是按值线性的,而是按位置线性的。你从来没有说过你想让下摆按值线性。当然,设置一个间隔是不可能的。相反,你需要在需要的地方逐个添加自定义标签。-你显示的图表有非线性刻度。你想添加实验室的是真的图表吗els to?是的,这是用MS Chars生成的图表。我想在两者之间添加记号(例如10到11之间)…当然,使用比自定义标签更简单的版本…好吧,我添加了一个如何添加自定义标签的示例。您应该能够创建您想要的所有标签。。