.Net 图表对数轴缩放,意外缩放问题
.Net Chart Logarithmic Axis Scaling, unexpected scaling issues
我有一个具有对数缩放 x 轴和 y 轴的示例图表,
好的,现在如果我将最小 X 值设置为 48,我会得到
这太难读了,我更喜欢保留 1、10、100、以 10 为底的对数刻度,但如果有意义的话,从根本上改变起点,这样上图看起来更像。 ...
(假设那张照片中有一个 Y 轴)
几个我试过的例子,
- 尝试交叉 属性 但这只会影响 x 轴和 y 轴相互交叉的位置
- 尝试缩放视图,但这会遇到保存 x 轴缩放问题
- 尝试使用间隔偏移**我不确定这是否行得通,但事实证明它很难在对数尺度上使用
最终结果将是这样的图表....
随着值的更新,左侧的垂直线的位置也会更新,但我希望它保持在一个恒定的位置,并且图像基本上会移动以适应
关于图表区域和轴,我已经查看了每个 属性,但我似乎找不到方法来做到这一点。
间隔偏移量在相当 non-intuitive 范围内工作,而您在上述实例中的对数缩放将间隔偏移量设置为
间隔偏移 = Math.log(100) - Math.log(48)
达到预期的结果
我发现 Math.Log10
需要计算 IntervalOffset
属性。
您可以计算这些(包括 MinorGrid
的偏移量,而不是硬编码一整套数字,这些数字都取决于起始数字,如果您想要在 chartMin
和下一个顺序 10)。因此,假设一个名为 chart
的 Chart
对象,您需要(在 C# 中):
int chartMin = 48;
double logMin = Math.Log10 (chartMin);
chart.ChartAreas[0].AxisX.Minimum = chartMin;
chart.ChartAreas[0].AxisX.IntervalOffset = Math.Ceiling (logMin) - logMin;
chart.ChartAreas[0].AxisX.MinorGrid.Interval = 1;
chart.ChartAreas[0].AxisX.MinorGrid.IntervalOffset = Math.Floor (logMin) - logMin;
And the resulting X-axis looks like this
我有一个具有对数缩放 x 轴和 y 轴的示例图表,
好的,现在如果我将最小 X 值设置为 48,我会得到
这太难读了,我更喜欢保留 1、10、100、以 10 为底的对数刻度,但如果有意义的话,从根本上改变起点,这样上图看起来更像。 ...
(假设那张照片中有一个 Y 轴)
几个我试过的例子,
- 尝试交叉 属性 但这只会影响 x 轴和 y 轴相互交叉的位置
- 尝试缩放视图,但这会遇到保存 x 轴缩放问题
- 尝试使用间隔偏移**我不确定这是否行得通,但事实证明它很难在对数尺度上使用
最终结果将是这样的图表....
随着值的更新,左侧的垂直线的位置也会更新,但我希望它保持在一个恒定的位置,并且图像基本上会移动以适应
关于图表区域和轴,我已经查看了每个 属性,但我似乎找不到方法来做到这一点。
间隔偏移量在相当 non-intuitive 范围内工作,而您在上述实例中的对数缩放将间隔偏移量设置为
间隔偏移 = Math.log(100) - Math.log(48) 达到预期的结果
我发现 Math.Log10
需要计算 IntervalOffset
属性。
您可以计算这些(包括 MinorGrid
的偏移量,而不是硬编码一整套数字,这些数字都取决于起始数字,如果您想要在 chartMin
和下一个顺序 10)。因此,假设一个名为 chart
的 Chart
对象,您需要(在 C# 中):
int chartMin = 48;
double logMin = Math.Log10 (chartMin);
chart.ChartAreas[0].AxisX.Minimum = chartMin;
chart.ChartAreas[0].AxisX.IntervalOffset = Math.Ceiling (logMin) - logMin;
chart.ChartAreas[0].AxisX.MinorGrid.Interval = 1;
chart.ChartAreas[0].AxisX.MinorGrid.IntervalOffset = Math.Floor (logMin) - logMin;
And the resulting X-axis looks like this