当前位置: 首页 > 知识库问答 >
问题:

为图表生成标签

广昊昊
2023-03-14

我试图找到一种算法,为我正在编写的图表引擎生成Y轴,并且处于拔毛阶段。

四处搜索会产生各种解决方案,但我很难找到一个适合所有数据范围的解决方案。

这是我到目前为止得到的:

// Raise the max and lower the min so that we get a prettier looking chart.
var tickRangeMinMax = maxValue - minValue;
var min = tickRangeMinMax * Math.round(minValue / tickRangeMinMax);
var max = tickRangeMinMax * Math.round(1 + (maxValue / tickRangeMinMax));

这给了我一个新的范围,我想为它生成一个Y轴。

我计算每个YAxis标签之间的距离,如下所示:

var ticks = tickRange(min, max, labelCount);

function tickRange(minVal, maxVal, tickCount) {        
    var range = maxVal - minVal;
    var unRoundedTicksSize = range / (tickCount - 1);
    var x = Math.ceil(log10(unRoundedTicksSize) - 1);
    var pow10X = Math.pow(10, x);
    var roundedTickRange = Math.ceil(unRoundedTicksSize / pow10X) * pow10X;

    return roundedTickRange;
}

我还尝试使用更简单的算法计算滴答声:

return (max - min) / labelCount

前一种方法适用于小范围,例如23-

在0的情况下-

我通过循环labelCount(在我的例子中是5)并从之前的标签值中减去刻度范围,将标签添加到标签集合。我从最大值开始。

共有1个答案

萧成文
2023-03-14

供参考,仅在Python中与您的相同(不会说JS):

import math

def ticks (low, high, labels):
        nlabels = len(labels)
        tick = (high - low) / (nlabels - 1)
        x = math.floor(math.log10(tick))
        pow10x = math.pow(10,x)
        tick = int(math.ceil(tick/pow10x)*pow10x)
        return zip (range(low,high+tick,tick), labels)


print (ticks (0, 225, ['a', 'b', 'c', 'd', 'e']))

ps.也许楼层对数更好

 类似资料:
  • 所以我用https://github.com/franzsilva/flutter_launcher_icons为我的颤动项目生成图标——这很甜蜜,非常感谢。 尝试创建IOS应用程序时,出现以下错误: Project/ios/Runner/Assets.xcassets:错误:没有一个输入目录包含匹配的贴纸图标集或名为"Icon-App"的应用程序图标集。 我对iOS发展知之甚少,所以我不知道发生

  • 本文向大家介绍java生成饼图svg及JFreeChart生成svg图表,包括了java生成饼图svg及JFreeChart生成svg图表的使用技巧和注意事项,需要的朋友参考一下 Jfreechart本身不能生成SVG图形,但是可以借助另外一个东西,辅助生成.好像是这个:batik ,具体代码请看下文 一:Java生成svg饼图,附带了一个标签显示各个颜色代表的部分 二.java生成SVG 3D饼

  • 我试图自动生成刀的视图。我已经预先设置了配置: whitch为表生成dao,但不为视图生成dao。根据文件规定: 如果您使用的是jOOQ的代码生成器,那么可以将其配置为为为您生成POJO和DAO。然后,jOOQ为每个UpdateRecord生成一个DAO,即为每个表生成一个单列主键。 和 公共接口 它表示来自表或视图的记录-表记录其基础表或视图具有“主唯一键”,即主键或至少一个唯一键jOOQ使用“

  • 我有带有s的表单元素,我希望有唯一的ID将s链接到带有属性的元素。大概是这样的: 我以前是根据,但自从React 0.13之后就不可用了。现在最好和/或最简单的方法是什么?

  • 问题内容: 我有带有s的表单元素,并且我希望有唯一的ID将s 链接到具有attribute的元素。像这样: 我曾经根据生成ID,但自从React 0.13起就不可用了。现在最好和/或最简单的方法是什么? 问题答案: 这个解决方案对我来说很好。 : 我可以这样使用它: 但它在同构应用程序中不起作用。 添加17.08.2015 。相反,自定义NEWID的功能,您可以使用UNIQUEID从lodash。