我有用对数刻度(两个轴)在Visual Studio 2015(C#)中使用MS图表创建的绘图(请参阅图)。以对数形式显示刻度标签MS Chart(log-log)
我需要在x轴上添加更多的网格线和相应的标签。我想标记1(2,3,4 ...)和10之间以及10和100(20,30,40 ...)之间的每个小勾号,并且还想在例如10和20.
我用1
的间隔为图表的坐标轴属性中的标签,但它不起作用。
我有用对数刻度(两个轴)在Visual Studio 2015(C#)中使用MS图表创建的绘图(请参阅图)。以对数形式显示刻度标签MS Chart(log-log)
我需要在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);
}
正如您所看到的,我们需要使用应用于Axis
的Log10
函数来计算值,并且通过乘除分隔符来实现间距,而不是通过相加来实现。间距值也必须由Log10缩放并包含在函数中。
我们还需要处理值为1
的情况,这相当于标签位置0
;但是这不会导致任何间隔乘以/划分它。所以我们手动设置合适的ToPosition
。
我希望我知道的更简单的方法来做到这一点,但由于标签位置的名单是真的你的选择,我怀疑有一个捷径..
我已经加入点40和50来显示一个标签如何匹配..还要注意标签位置是如何混合的。随意使用你的!
谢谢,但这不适用于对数轴... – betelgeuse
当然,它__does__,因为__你可以看到___如果__just look__! __screenshot__是代码__的结果___! – TaW
正如您所知道的,对数刻度中刻度线或网格线之间的间距与图中所示不是线性的。我需要在1和10之间添加:1.1,1.2,1.3,1.4,1.5,1.6 ... 1.9(不是3.2) – betelgeuse
您能否提供我们已经试过的代码?你设置为1的时间间隔是多少?您可以设置多个时间间隔。有一个用于chartArea X轴,一个用于主要刻度线,一个用于次要刻度线等。能够看到您的代码将帮助您获得更多答案。请参阅http://stackoverflow.com/help/mcve – Baddack
请参阅[http://stackoverflow.com/questions/9762059/how-to-display-logarithmic-x-axis-minor-label](http:// stackoverflow.com/questions/9762059/how-to-display-logarithmic-x-axis-minor-label)。我认为他们可能会解决您的问题。 – Baddack