为图表生成标签
Generating labels for a chart
本文关键字:标签 更新时间:2023-09-26
我正在尝试找到一种算法来为我正在编写的图表引擎生成 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 -> 200 等小范围,但是当我有一个范围时,这些方法都不适合我,比如 0 -> 3000。
在 0 -> 3000 的情况下,我的某些标签最终会出现负值。
我通过循环遍历 labelCount(在我的例子中为 5)并从之前的标签值中减去刻度范围来向标签集合添加标签集合。我从最大值开始。
作为参考,仅在 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']))
也许对数floor
更好
相关文章:
- 在<页眉>标签
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- iframe正在添加标签,需要删除它们
- 如何自动调整标签的高度以适应内容
- Jquery标签插件粘贴问题
- Twitter引导程序Typeahead-Id&标签
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- Morris.js折线图x轴标签在调整大小后消失
- JavaScript goto 标签如何使用内部循环
- 显示某个用户ID的某个标签的30张Instagram图片
- 标签客户端的设置值
- 谷歌图表显示所有标签
- 如何在图片和边缘之间居中设置标签
- 在Datatables中设置本地化后,需要更改标签文本
- 第二组标签及其内容赢得'默认情况下t加载
- 在一个javascript文件中为整个网站创建标签
- 兰吉 |如何在 span 标签上使用单击事件删除突出显示的文本
- Knockout.JS标签在foreach内部不起作用
- 如何在离子框架+有角度的框架中制作顶部标签
- 是否可以自动拉取“随机”;标签“;从一长串文本中提取