views:

181

answers:

1

In an answer to an earlier question of mine regarding fixing the colorspace for scatter images of 4D data, Tom10 suggested plotting values as symbols in order to double-check my data. An excellent idea. I've run some similar demos in the past, but I can't for the life of me find the demo I remember being quite simple.

So, what's the easiest way to plot numerical values as the symbol in a scatter plot instead of 'o' for example? Tom10 suggested plt.txt(x,y,value)- and that is the implementation used in a number of examples. I however wonder if there's an easy way to evaluate "value" from my array of numbers? Can one simply say: str(valuearray) ?

Do you need a loop to evaluate the values for plotting as suggested in the matplotlib demo section for 3D text scatter plots?

Their example produces:

alt text

However, they're doing something fairly complex in evaluating the locations as well as changing text direction based on data. So, is there a cute way to plot x,y,C data (where C is a value often taken as the color in the plot data- but instead I wish to make the symbol)?

Again, I think we have a fair answer to this- I just wonder if there's an easier way?

+1  A: 

The easiest way I've seen to do this is:

for x, y, val in zip(x_array, y_array, val_array):
    plt.text(x, y, val)

Also, btw, you suggested using str(valarray), and this, as you may have noticed doesn't work. To convert an array of numbers to a sequence of strings you could use

valarray.astype(str)

to get a numpy array, or,

[str(v) for v in valarray]

to get a Python list. But even with valarray as a proper sequence of strings, plt.text won't iterate over it's inputs.

tom10
oh! - so you need to iterate for plt.text? (sorry I haven't checked stackoverflow recently- missed your reply, Tom!)
AllenH