Hi,
I was able to get past the error, and I am now trying to add a
callback to receive values from a queue, add it to the existing poly
line, and render the same using matplotlib. The code snippet is shown
below:
=== BEGIN ===
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import sys
import paho.mqtt.client as mqtt
def update_line(num, x, y, z, l):
print x, y, z
l, = ax.plot(x, y, z, label='Line')
return l,
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("hello/world")
def on_message(client, userdata, msg):
data = msg.payload
print(msg.topic+" "+str(msg.payload))
point = np.asarray([float(x) for x in data.split()])
print point
x=np.concatenate((x,[point[0]]))
y=np.concatenate((y,[point[1]]))
z=np.concatenate((z,[point[2]]))
l, = ax.plot(x, y, z, label='Line')
return l,
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
x = np.array([1.0, 2.0, 3.0])
print type(x)
y = np.array([4.0, 7.0, 8.0])
z = np.array([6.0, 9.0, 5.0])
l, = ax.plot(x, y, z, label='Line')
ax.legend()
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect_async("localhost", 1883, 60)
client.loop_start()
line_ani = animation.FuncAnimation(fig, update_line, 25, fargs=(x, y,
z, l), interval=2000, blit=True)
plt.show()
=== END ===
I now hit the following error:
=== ERROR ===
$ python mat-3.py
<type 'numpy.ndarray'>
[ 1. 2. 3.] [ 4. 7. 8.] [ 6. 9. 5.]
Connected with result code 0
[ 1. 2. 3.] [ 4. 7. 8.] [ 6. 9. 5.]
[ 1. 2. 3.] [ 4. 7. 8.] [ 6. 9. 5.]
[ 1. 2. 3.] [ 4. 7. 8.] [ 6. 9. 5.]
hello/world 34.56 15.912 0.72
[ 34.56 15.912 0.72 ]
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py",
line 2287, in _thread_main
self.loop_forever()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py",
line 1261, in loop_forever
rc = self.loop(timeout, max_packets)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py",
line 811, in loop
rc = self.loop_read(max_packets)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py",
line 1073, in loop_read
rc = self._packet_read()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py",
line 1475, in _packet_read
rc = self._packet_handle()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py",
line 1943, in _packet_handle
return self._handle_publish()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py",
line 2118, in _handle_publish
self._handle_on_message(message)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py",
line 2274, in _handle_on_message
self.on_message(self, self._userdata, message)
File "mat-3.py", line 23, in on_message
x=np.concatenate((x,[point[0]]))
ValueError: zero-dimensional arrays cannot be concatenated
[ 1. 2. 3.] [ 4. 7. 8.] [ 6. 9. 5.]
[ 1. 2. 3.] [ 4. 7. 8.] [ 6. 9. 5.]
[ 1. 2. 3.] [ 4. 7. 8.] [ 6. 9. 5.]
...
=== END ===
Is there a better way to re-render the plot after receiving data?
Thanks!
SK
--
Shakthi Kannan
http://www.shakthimaan.com
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users