谷歌折线图:拖动调整值

时间:2012-01-13 08:35:58

标签: javascript drag google-visualization highcharts linechart

我最近放弃使用Graphael和扩展程序包Ico。我认为它仍然是一个很棒的库,它需要更好的文档和适当的API才能被广泛采用。

我已经使用图表转换区域以使用Google Charts,似乎无法找到一种方法来执行我使用graphael的一个特定功能:拖动支持。我的line charts之一需要可编辑,这意味着可以上下拖动线上的各个点以调整值。

我一直试图找到一个事件或一种方法来在API中附加事件而没有太大的成功。有没有人设法做那样的事情?

据说可以做自定义图表 - 这样可以这样做吗?

编辑:似乎不太可能,或者很难加入Google API或输出SVG。它位于iframe中,没有可用的源代码,因此它的选择越来越少。

我从那时起开始尝试Highcharts。我能够完成Google引擎所做的一切,并且在渲染后可以摆弄图表。由于提供了源代码,因此可以更轻松地确定某些内容。它似乎比Google解决方案更快一些,因为它在使用折线图而不是单独的SVG圆形元素时使用路径。

我现在面临的问题与SVG Path元素有关 - 没有单点可以设置拖动。因此,为了使用jQuery.draggable,必须在与要拖动的SVG Path片段相同的位置注入SVG Circle或其他元素。所以必须解决以下问题: - 如何将创建的元素放置到正确的位置? - 如何在缩放图表时移动元素(任一轴上的最小值或最大值更改)? - 如何将新位置转换回一个值,为所提供的系列数据进行缩放?

有没有人对Highcharts有足够的深度体验来摆弄这些?我会尽可能提供JSfiddle示例。

2 个答案:

答案 0 :(得分:15)

可拖动点不是内置于Highcharts中,但是使用API​​中的事件和方法可以实现可编辑的线/列/散点/区域图(仅处理y方向上的点移动) )。以下示例使用mousemovemousedownmouseup事件来处理交互。

  • mousedown处,如果一个点被聚焦,则记录开始y值。 y轴.translate方法是关键,它将鼠标位置转换为数据域。
  • mousemove,焦点和工具提示会更新为新值。
  • mouseup点更新,并触发新事件drop,以更新状态消息中的文本。

jsfiddle上的完整示例。 另请参阅功能请求draggable points

答案 1 :(得分:2)

现在这是Highcharts上的一个可用插件: http://www.highcharts.com/plugin-registry/single/3/Draggable%20Points