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

Jody Klymak jklymak at uvic.ca
Sun Feb 18 18:50:10 EST 2018


Hi,

Can you whittle this down to a self-contained small example?

Cheers,   Jody



> On Feb 18, 2018, at  12:43 PM, tia <teernabachoo at gmail.com> wrote:
> 
> 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
> 
> 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)
> 
> 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/
> 
> 
> 
> 
> 
> --
> Sent from: http://matplotlib.1069221.n5.nabble.com/matplotlib-users-f3.html
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users at python.org
> https://mail.python.org/mailman/listinfo/matplotlib-users



More information about the Matplotlib-users mailing list