我目前正在使用System.Windows.Forms.DataVisualization.Charting.Chart
在.NET中使用图表。到目前为止,它似乎非常强大,而且效果很好。然而,就如何自动计算间隔而言存在巨大的问题。我使用了很多double
值,而在像ZedGraph这样的库中,它可以完美地处理这个问题。它选择最小/最大/间隔就好了。但是,在MS Chart中,它可以选择206.3334539832作为最小值,并选择相似小数精度的间隔。显然这看起来很难看。
所以,我尝试简单地制作轴格式{0.00}
,并且在加载图表时效果很好。除非放大,否则你需要更高的精度,可能是4位小数而不是2位。看起来我要么一直处于9个小数位,要么是一个常数固定的数字,当有人需要更高的精度时它可能会破坏。我宁愿根据当前应用的缩放级别来获取精度。像ZedGraph和Dundas这样的图书馆(我相信MS甚至正在使用它!)倾向于选择在放大和缩小时改变的好值。
当变焦框改变时,有没有办法让间隔改变精度?这可能是我设置错误的一些简单属性,但很难说这个东西有数百万个属性(特别是当有大约14个代表Interval概念的地方时)。
答案 0 :(得分:5)
缩放时我遇到了完全相同的问题。我添加了代码来格式化轴标签并从Paint处理程序中调用它。 Axis View对象具有IsZoomed属性,并具有获取当前轴限制(GetViewMinimum / Maximum)的函数。除非Max-Min =范围小于1,否则我将Axis LabelStyle.Format设置为“N”。然后我将格式设置为“F#”,其中#是根据轴范围计算的。
# = Convert.ToInt32(Math.Abs(Math.Log10(range) - .5)) + 1;
答案 1 :(得分:1)
玩过图表控件后,我无法找到解决问题的简单方法。但是,以下内容可能有所帮助:
您是否考虑过自己设置轴的最大值和最小值?如果将实际的最大值和最小值四舍五入到最接近的合理“圆”数(5,10,0.5,0.01),这应该使计算的间隔更加友好。
我知道这不是一个理想的解决方案,但通过仔细选择最大值和/或最小值,您可以确保间隔是“更好”的数字。如果您的轴的范围可以被2,5和2整除。 10它应该导致相当好的间隔。
答案 2 :(得分:1)
为什么不修改数字格式字符串。
创建格式字符串
string formatString = "{0.00";
识别缩放级别,例如zoomLevel = 2;
formatString = formatString.PadRight(5+zoomLevel, '0');
formatString += "}";
现在在轴图例上使用此格式。使用字符串构建器或更好的方法来修改格式字符串。
答案 3 :(得分:0)
为了以最低的成本提供结果,您可以使用指数科学格式
答案 4 :(得分:0)
您可以附加到自定义事件。 从那里,您可以修改x轴上的标签:
var xAxisLabels = chart1.ChartAreas[0].AxisX.CustomLabels;
...
xAxisLabels[0].Text = ...
设定分钟。最多值:
chart1.ChartAreas[0].AxisX.Maximum = ...;
等
答案 5 :(得分:0)
您可以根据数据集动态更新最大值和最小值。每次用户放大时,你都会对每个点做一次FOREACH并获得统计数据,并根据该设置确定你的最大值和最小值
答案 6 :(得分:0)
设置轴的IntervalOffset很有帮助,这里有一个例子:
Private Sub chMap_AxisViewChanged(sender As System.Object, e As System.Windows.Forms.DataVisualization.Charting.ViewEventArgs) Handles chMap.AxisViewChanged
'the grid ticks are rounded values
e.Axis.IntervalOffset = -e.Axis.ScaleView.ViewMinimum
End Sub