【问题标题】:Creating a "normal" line chart in amcharts.js with arrays? [closed]使用数组在 amcharts.js 中创建“正常”折线图? [关闭]
【发布时间】:2015-05-05 20:10:29
【问题描述】:

我对 amCharts 做最简单的任务感到越来越绝望。好吧,至少我认为很简单。我想用“正常”数据创建一个正常的折线图。我说的正常是什么意思?好吧,有一个包含我的 y 值的数组,也许还有一个用于 x 的数组:

x = [1,2,3,4]
y = [5,6,7,8]

将这样的内容放入图表中不是很容易吗?我仍然坐在这里不知道如何在 amcharts 中正确地做到这一点(!)。我正在使用 Flask (Python) 并且可以使用 jsonify 将我的数组转换为 JSON 文件并将其发送到客户端,但我无法再进一步了。

有什么想法吗?我的意思是,这不应该是最基本的任务吗?但是所有使用 amCharts 的例子都对 x.. 的日期格式做了特殊的处理。

非常感谢!

【问题讨论】:

  • 到目前为止你有什么?

标签: javascript python json flask amcharts


【解决方案1】:

首先,如果您要从任意 X 和 Y 坐标绘制折线图(而不是绘制基于系列的数据),则最好使用 XY 图而不是系列图。

此外,amCharts 将无法在单独的坐标数组中绘制数据。

您可以在生成数据时将数据转换为适当的格式,如下所示:

chartData = [ {
  x: 1,
  y: 5
}, {
  x: 2,
  y: 6
}, {
  x: 3,
  y: 7
}, {
  x: 4,
  y: 8
}];

或者添加一些代码,将您的数据转换为与 amCharts 兼容的数据提供给图表之前:

/**
 * Source data
 */
var x = [1,2,3,4];
var y = [5,6,7,8];

/**
 * Convert source data to AmCharts-compatible format
 */
var chartData = [];
for( var i = 0; i < x.length; i++ ) {
  chartData.push( {
    "x": x[ i ],
    "y": y[ i ]
  } )
}

/**
 * Create the chart
 */
var chart = AmCharts.makeChart( "chartdiv", {
  "type": "xy",
  "pathToImages": "http://www.amcharts.com/lib/3/images/",
  "dataProvider": chartData,
  "graphs": [ {
    "bullet": "circle",
    "bulletSize": 8,
    "lineAlpha": 1,
    "lineThickness": 2,
    "fillAlphas": 0,
    "xField": "x",
    "yField": "y",
  } ]
} );

这是上面的工作演示:

http://codepen.io/amcharts/pen/15b2c710357a7e29eda11dc5caa07d44

【讨论】:

  • 非常感谢!太糟糕了,我不能直接使用数组,但很高兴我现在可以使用详细的 x 值。
  • 很高兴有帮助。我必须承认,我不太明白为什么你不能使用数组?我没有使用 Python 的经验,但我很确定有一种方法可以在生成网页时将 Python 中的本机数组传输到 JSON。还是我在这里完全偏离了轨道?
  • 当我从 Python 生成 JSON 时,假设有两行,每行 3 个点,它看起来像这样:{ "result": [ [ 1.2, 2.0, 3.5 ], [ 4, 3, 7.5 ] } 在其他图表中,我可以使用“data.result[0]”处理这些数据对于第一行等。也许也可以为 x 轴添加一个字段,但这就是我希望图表接受数据的方式。
  • 感谢您的解释。这并没有太大变化。您将使用 data.result[0] 而不是“x”而不是“y” - data.result[0]。我希望这是有道理的。
  • 好吧,我所期望的是,我可以像这样输入数据:{x = [1,2,3,4], y: [5,6,7,8]} 但似乎这不起作用。所以我真的必须在每个值之前添加一个“x:”吗?这会大量增加 JSON 请求,或者我必须循环遍历所有数据以使其成为正确的 json 字符串 - 这么多计算,仅仅是因为 amCharts 不接受数组?
【解决方案2】:

以下是最简单的定义。 dateProvider 是一个对象数组,其中每个元素代表 x 轴项及其 y 值。

AmCharts.makeChart("your element id",{
    "type": "serial",
    "pathToImages": "http://cdn.amcharts.com/lib/3/images/",
    "categoryField": "category",
    "graphs": [
        {
            "valueField": "column-1"
        }
    ],
    "dataProvider": [
        {
            "category": "1",
            "column-1": "8"
        },
        {
            "category": "2",
            "column-1": 6
        },
        {
            "category": "3",
            "column-1": 2
        },
        {
            "category": "4",
            "column-1": 1
        }
    ]
});

现场样本: http://live.amcharts.com/2JmYT/edit/

【讨论】:

  • 谢谢 - 这个很好的例子也解释了我的问题:如何正确传输我的数组/列表(在 Python 中)以使它们被 amChart 接受?我的第一个疯狂猜测是创建一个 for 循环,它会生成一个字符串,添加所有这些括号和书面名称(“column-1,category”)。但这感觉非常错误,如果不是完全不干净和缓慢的话。其次:将 "category": "1", 更改为 "category": "1.323" 不会带来预期的结果 - x 值仍然是 1 而不是 1.323。
  • 好的,对于问题 (1) 更好的一步可能是创建一种 jsonify 将自动正确编码的 dict,所以我可能不需要手动添加括号和东西,但仍然有点奇怪且耗时。
猜你喜欢
  • 2020-02-23
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多