[Matplotlib-users] TypeError: float() argument must be a string or a number

tia teernabachoo at gmail.com
Sun Feb 18 14:38:34 EST 2018


I am trying to get sensor data from Ubidots and plot them in a graph using
Matplotlib. The graph can then be displayed on a web server via Flask. I am 
getting the following error when I run the codes:

    TypeError: float() argument must be a string or a number

I think I have formatted the timestamp well and I checked questions related
to that but I don't know what's wrong with the codes. This may seem like a
duplicate of my previous [question][1] but this is another error with
updated codes so I thought I should post it as a new question.

Matplotlib-Flask.py

    from flask import Flask, request, render_template
    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_times():
    	api = ApiClient(token='XXXXXXXXXXXXXXXXXXXXXXXX')
    	variable = api.get_variable('XXXXXXXXXXXXXXXXXXXXXX')
    	value = variable.get_values(1)[0]
    	timestamp = value.get('timestamp')
    	global t
        t= mdates.epoch2num(timestamp)
        return t
    
    //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'  : t
    		}
    	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_times()
    	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>
          
Hello, World!

          
The date and time on the server is: {{ time }}

           </> 
       </body>
    </html>

I used the following reference links in case that helps:

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

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

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

Matplotlib graph using Flask:
http://www.instructables.com/id/From-Data-to-Graph-a-Web-Jorney-With-Flask-and-SQL/


  [1]:
https://stackoverflow.com/questions/48849227/matplotlib-getting-valueerror-invalid-literal-for-float



--
Sent from: http://matplotlib.1069221.n5.nabble.com/matplotlib-users-f3.html


More information about the Matplotlib-users mailing list