【问题标题】:Plotting data using higcharts in flask web application在烧瓶 Web 应用程序中使用 higcharts 绘制数据
【发布时间】:2016-10-02 14:08:43
【问题描述】:

我正在尝试从 mysql 服务器绘制数据并将其显示在 Web 服务器中。我正在使用 highcharts javascript 库进行绘图。我可以从 mysql 数据库中获取数据,并将数据作为 json 数据从服务器端发送到客户端。然后通过使用 highcharts 我想显示它。但是当我尝试绘图时,图表什么也没显示。

这是服务器端重要的 sn-p 代码(我使用的是 AJAX):

def background_process():
    start = request.form['name_start']
    finish = request.form['name_finish']
    df_sorted = mutechDataManipulate.sort_by_time(df, pd.to_datetime(str(start)), pd.to_datetime(str(finish)), 'Date')
    print df_sorted['Date'].head()
    df_out_json = df_sorted[['Date', 'High']].to_json(orient='values')
    return json.dumps(df_out_json)

这里是客户端(我成功从服务器获取json数据):

$(document).ready(function(){
$(document).on("click", "#btn1", function() {       
    console.log("alii");
    var user = $('input[name="name_start"]').val();
    var pass = $('input[name="name_finish"]').val();
    console.log("sivgin");      
    $.ajax({
        url: '/background_process',
        data: $("form").serialize(),
        type: "POST",
        success: function(response) {
            $('#result').highcharts({
        xAxis: {
            type: 'datetime'
        },
        yAxis: {
            title: {
                text: 'High'
            }
        },
        legend: {
            enabled: false
        },
        series: [{
            type: 'area',
            name: 'USD to EUR',
            data: response
                }]
         });
            console.log(response)
        },
        error: function(error) {
            console.log(error);
        }
    });
});
});

最后,我得到一个像这样的空白图表:

此外,我尝试绘制时间序列折线图。怎么了?

编辑:忘记 html 文件:

    <!DOCTYPE html>
<html lang="en">
<head>
  <title>Mutech</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="static/css/bootstrap.min.css">
    <script src="static/js/jquery.min.js"></script>
  <script src="static/js/bootstrap.min.js"></script>
  <script src="static/js/script.js"></script>
  <script src="static/js/jquery-1.9.1.js"></script>
  <script src="https://code.highcharts.com/highcharts.js"></script>
  <script src="https://code.highcharts.com/modules/exporting.js"></script>

</head>
<body>
<br/>
<div class="container">  
  <form class="form-inline" id="form1"  method="post" >
    <div class="form-group">
      <label>Start Date</label>
      <input class="form-control" id="id_start" name ="name_start">
    </div>
    <div class="form-group">
      <label for="pwd">Finish Date</label>
      <input class="form-control" id="id_finish" name ="name_finish">
    </div>
    <br/><br/>
    <br/>
    <button type="button" class="btn btn-default" id= "btn1">Submit</button>

  </form>
</div>

<div class="container" id = "result">
</div>



</body>
</html>

【问题讨论】:

  • 由于图表为空,很可能没有数据可显示。检查您的 AJAX 调用。尝试获取数据并将其显示在 div 中。它将有助于调试。我遇到了一个非常相似的问题,原来我的图表设置不正确。如果您可以在此处发布控制台错误消息也会有所帮助:)
  • 实际上没有错误信息,一切看起来都很好,我可以在控制台上看到数据。 :)
  • 您的响应数据看起来如何?
  • [[1285632000000,null],[1285545600000,25.39]] 这样的东西。第一个日期以毫秒为单位,然后为 @Grzegorz Blachliński 赋值

标签: javascript jquery python highcharts flask


【解决方案1】:

看起来您的数据格式不适合 Highcharts。如果您查看this other StackOverlow question about JSON data and Highcharts,您会发现数据应该是一个字典列表。

为此,为什么 pandas 需要将值 "records" 传递给 orient 选项。

df_out_json = df_sorted[['Date', 'High']](orient="records")
#[{"Date":1285632000000, "High":None}, {"Date":1285545600000, "High":25.39}]

pandas documentation 中查看更多信息以获取to_json

【讨论】:

  • 我改变了方向,它给了我这样的响应数据:[{\"Date\":1285632000000,\"High\":null},{\"Date\":1285545600000,\" High\":25.39}] 但没有任何变化。 @Jalepeno112
  • 我认为您可以尝试使用 'y' 而不是 'High'。
  • 我认为问题是 json 字符串。响应数据是字符串,我必须使用 javascript 或其他方式将其转换为数字。因为我是 javascript 新手,所以我不知道该怎么做。
猜你喜欢
  • 2019-07-15
  • 1970-01-01
  • 2018-12-15
  • 2020-08-18
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多