15

I'm trying to do something that I think should be pretty straight forward but I can't seem to get it to work.

I'm trying to plot 16 byte values measured over time to see how they change. I'm trying to use a scatter plot to do this with: x axis being the measurement index y axis being the index of the byte and the color indicating the value of the byte.

I have the data stored in a numpy array where data[2][14] would give me the value of the 14th byte in the 2nd measurement.

Every time I try to plot this, I'm getting either:

ValueError: x and y must be the same size
IndexError: index 10 is out of bounds for axis 0 with size 10

Here is the sample test I'm using:

import numpy
import numpy.random as nprnd
import matplotlib.pyplot as plt

#generate random measurements
# 10 measurements of 16 byte values
x = numpy.arange(10)
y = numpy.arange(16)
test_data = nprnd.randint(low=0,high=65535, size=(10, 16))

#scatter plot the measurements with
# x - measurement index (0-9 in this case)
# y - byte value index (0-15 in this case) 
# c = test_data[x,y]

plt.scatter(x,y,c=test_data[x][y])
plt.show()

I'm sure it is something stupid I'm doing wrong but I can't seem to figure out what.

Thanks for the help.

1 Answer 1

13

Try using a meshgrid to define your point locations, and don't forget to index into your NumPy array properly (with [x,y] rather than [x][y]):

x, y = numpy.meshgrid(x,y)
plt.scatter(x,y,c=test_data[x,y])
plt.show()

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.