【发布时间】:2016-08-15 10:54:02
【问题描述】:
我将数据作为 JSON 传递给 Highcharts 折线图。有多条线(而是曲线),它们有不同的起点和终点——但它们都需要一起绘制。因此,我的系列看起来像这样,其中“数据”被排列成 x,y 对:
series = [{'data': [[20, 400], [30, 450]], 'name': 'pc1', 'visible': False},
{'data': [[40, 525], [50, 600], [70, 680]], 'name': 'pc2', 'visible': False},
{'data': [[80, 700], [90, 980]], 'name': 'pc3', 'visible': False}, etc.
此数据是使用标准空气密度计算得出的。我希望用户能够输入不同的空气密度,并通过单击按钮来使用数据(我正在考虑使用 setData)。
基本上,数据是风速与 RPM 的关系 - X 值是风速,Y 是相应的 RPM。通过改变新的空气密度,用户将生成一个调整因子,然后用于在新点找到 RPM。一个简单的例子:
Standard Air Density (1.225 kg/m3):
1 mph 100rpm
2 mph 250rpm
3 mph 500rpm
现在我们使用公式 adj_factor = (new air density/1.225)^(1/3) -> 计算新空气密度(假设 1.5 kg/m3)的调整因子 -> 返回 1.07。有了这个因子,我可以通过以风速 * 调整因子获取功率并插值数据来计算新的 rpm。
New Air Density (1.5 kg/m3)
1 mph, (whatever RPM is @ 1.07mph (1mph*adj factor))
2 mph, (whatever RPM is @ 2.14mph (1mph*adj factor))
3 mph, (whatever RPM is @ 3.21mph (1mph*adj factor))
我遇到的问题是我在 JS 方面非常缺乏经验,不太了解如何动态创建数据,或者如何使用调整后的风速引用旧曲线 Y 值。
要做到这一点,我必须知道我必须插入数据——我已经使用 numpy.
有没有办法从 JavaScript 端应用这种转换?我的图表是格式的标准 HighCharts 折线图:
$(document).ready(function() {
$(chart_id).highcharts({
chart: chart,
title: title,
credits: credits,
xAxis: {},
yAxis: yAxis,
legend: legend,
series: series
});
在我的 Django 视图中,我定义了所有参数:
chart = {"renderTo": chartID, "type": chart_type, "height": chart_height,}
title = {"text": 'Power Curves'}
yAxis = {"title": {"text": 'Output (RPM)'}}
series = json.dumps(series_)
还有前面提到的表格系列。该图工作正常 - 这是我正在努力解决的数据的动态加载和调整因素的实施。
谢谢
【问题讨论】:
-
您可以使用
Series.options从系列中获取当前数据,并在返回的对象访问数据中作为options.data。然后更改数据并使用Series.setData()应用于系列。如果您对此有疑问,请提供现场演示,例如在 JSFiddle 中。
标签: javascript python dynamic highcharts interpolation