Matplotlib:为float()获取ValueError无效的文字

时间:2018-02-18 06:58:51

标签: python matplotlib flask

我正在尝试从Ubidots获取传感器数据,并使用Matplotlib在图表中绘制它们。然后,图表可以通过Flask显示在Web服务器上。运行代码时出现以下错误:

ValueError: invalid literal for float(): 08:13:44

Matplotlib-Flask.py

from flask import Flask, request, render_template
import time
from datetime import datetime
from ubidots import ApiClient
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.animation as animation
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import io

app = Flask(__name__)

//get the latest value of the ldr sensor from Ubidots
def get_records():
    api = ApiClient(token='XXXXXXXXXXXXXXXXXXXXXXX')
    my_variable = api.get_variable('XXXXXXXXXXXXXXXXXXXX')
    ldr = my_variable.get_values(1)
    return ldr

//get the latest timestamp from Ubidots
def get_time():
    api = ApiClient(token='XXXXXXXXXXXXXXXXXXXXXXXX')
    variable = api.get_variable('XXXXXXXXXXXXXXXXXXXXXX')
    value = variable.get_values(1)[0]
    timestamp = value.get('timestamp')
    time= datetime.fromtimestamp(timestamp / 1000).strftime('%H:%M:%S')
    return time

//render the graph with x and y values of time and sensor values respectively and send to Flask
@app.route('/', methods=['POST'])
def my_form_post():
    ldr= get_records()
    time= get_time()
    templateData = {
        'ldr'   : ldr,
        'time'  : time
        }
    return render_template('main.html', **templateData)

//Plotting the graph using Matplotlib
@app.route('/')
def plot_temp():
    ldr= get_records()
    ys = ldr
    fig = Figure()
    axis = fig.add_subplot(1,1,1)
    axis.set_title("Light Intensity")
    axis.set_xlabel("Time")
    axis.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
    axis.grid(True)
    time= get_time()
    xs = time
    axis.plot(xs,ys)
    canvas = FigureCanvas(fig)
    output = io.BytesIO()
    canvas.print_png(output)
    response = make_response(output.getvalue())
    response.mimetype = 'image/png'
    ani= animation.FuncAnimation(fig, animate, interval=3000)
    return response

if __name__ == "__main__":
   app.run(host='0.0.0.0', port=80, debug=True)

main.html中:

<!DOCTYPE html>
   <head>
      <title>{{ title }}</title>
   </head>

   <body>
      <h1>Hello, World!</h1>
      <h2>The date and time on the server is: {{ time }}</h2>
      <img src="/" alt="Image Placeholder" width="49%">
   </body>
</html>

我在浏览器中打开页面时出现以下错误:

 ValueError: invalid literal for float(): 08:13:44
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/pi/MatPlotLib-Flask.py", line 51, in plot_temp
axis.plot(xs,ys)
File "/usr/lib/python2.7/dist-packages/matplotlib/__init__.py", line 1894, in inner
return func(ax, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/axes/_axes.py", line 1407, in plot
self.add_line(line)
File "/usr/lib/python2.7/dist-packages/matplotlib/axes/_base.py", line 1787, in add_line
self._update_line_limits(line)
File "/usr/lib/python2.7/dist-packages/matplotlib/axes/_base.py", line 1809, in _update_line_limits
path = line.get_path()
File "/usr/lib/python2.7/dist-packages/matplotlib/lines.py", line 989, in get_path
self.recache()
File "/usr/lib/python2.7/dist-packages/matplotlib/lines.py", line 676, in recache
x = np.asarray(xconv, np.float_)
File "/usr/lib/python2.7/dist-packages/numpy/core/numeric.py", line 531, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: invalid literal for float(): 08:13:44

我使用了以下参考链接:

Ubidots时间戳:http://community.ubidots.com/t/convert-timestamp-on-json/473/2

Ubidots Python API:https://github.com/ubidots/ubidots-python

烧瓶:http://www.mattrichardson.com/Raspberry-Pi-Flask/index.html

使用Flask的Matplotlib图:http://www.instructables.com/id/From-Data-to-Graph-a-Web-Jorney-With-Flask-and-SQL/

Matplotlib-获取ValueError float()的无效文字:08:13:44

更新了代码:

def get_UbiTimestamp():
    api = ApiClient(token='A1E-6l4DwwC86SDR6QRTJWXGDwshTGPHFl')
    variable = api.get_variable('5a5f80eec03f971388983b8e')
    value = variable.get_values(1)[0]
    timestamp = value.get('timestamp')
    time1= datetime.fromtimestamp(timestamp / 1000).strftime('%H:%M:%S')
    t = map(int, time1.split(':'))
    global converted_t
    converted_t = t[0] * 60 ** 2 + t[1] * 60 + t[2]
    return converted_t

my_form_post()和plot_temp():

def my_form_post():
  ldr= get_records()
  time= get_UbiTimestamp()
  templateData = {
        'ldr'   : ldr,
        'time'  : converted_t
        }
return render_template('main.html', **templateData)


def plot_temp():
   //some codes
   time= get_UbiTimestamp()
   xs = converted_t
   axis.plot(xs,ys)

错误:ValueError: invalid literal for int() with base 10: 'timestamp'

`

0 个答案:

没有答案