首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图(图)算法

图(图)算法
EN

Stack Overflow用户
提问于 2008-09-09 11:48:24
回答 2查看 5.2K关注 0票数 5

有没有人有合适的算法来计算轴的最小值和最大值?

在为给定的一组数据项创建图表时,我希望能够给出算法:

  • 集合中的最大值(y)。
  • 集合中的最小(y)值
  • 要出现在轴上的勾号数。
  • 必须以勾号形式显示的可选值(例如,当显示+ve和-ve值时为零)。

算法应该返回

  • 最大轴值
  • 最小轴值(虽然可以从最大轴、间隔大小和蜱数来推断)
  • 间隔大小

蜱的间隔应该是“合理的”大小(例如,1,3,5,甚至2.5,但不是更多的sig图)。

可选值的存在将使其倾斜,但如果没有该值,则最大的项应出现在前两个勾标之间,最低值出现在底部两个之间。

这是一个与语言无关的问题,但如果周围有一个C#/.NET库,那就太糟了;)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-09-09 13:22:44

我一直在使用jQuery flot图形库。它是开源的,并能很好地生成轴/滴答。我建议看一下它的代码,然后从那里找出一些想法。

票数 0
EN

Stack Overflow用户

发布于 2008-09-30 11:31:08

好的,这是我为我们的一个应用程序想出的。请注意,它没有处理您提到的“可选值”场景,因为我们的可选值总是0,但是您应该不难修改。

数据不断地添加到这个系列中,所以我们只是通过检查添加的每个数据点来保持y值范围的最新;这是非常便宜和容易跟踪的。相同的最小值和最大值都是特殊大小写:间距为0表示不应绘制标记。

这个解与Andrew上面的建议没有什么不同,只是它以一种略为杂乱无章的方式处理指数乘数的一些任意分数。

最后,此示例在C#中。希望能帮上忙。

代码语言:javascript
复制
    private float GetYMarkerSpacing()
    {
        YValueRange range   = m_ScrollableCanvas.
                    TimelineCanvas.DataModel.CurrentYRange;
        if ( range.RealMinimum == range.RealMaximum )
        {
            return 0;
        }

        float   absolute    = Math.Max(
                    Math.Abs( range.RealMinimum ),
                    Math.Abs( range.RealMaximum ) ),
            spacing     = 0;
        for ( int power = 0; power < 39; ++power )
        {
            float   temp    = ( float ) Math.Pow( 10, power );
            if ( temp <= absolute )
            {
                spacing = temp;
            }
            else if ( temp / 2 <= absolute )
            {
                spacing = temp / 2;
                break;
            }
            else if ( temp / 2.5 <= absolute )
            {
                spacing = temp / 2.5F;
                break;
            }
            else if ( temp / 4 <= absolute )
            {
                spacing = temp / 4;
                break;
            }
            else if ( temp / 5 <= absolute )
            {
                spacing = temp / 5;
                break;
            }
            else
            {
                break;
            }
        }

        return spacing;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档