Issue
I am trying to use the zip and annotate in order to add labels in a vector tlab
to a plot made using matplotlib
. Instead, whilst trying to add the labels to the plot I get the error
TypeError: unsupported format string passed to list.format
How can I get the points on the plot using this method?
code:
import matplotlib.pyplot as plt
import numpy as np
plt.clf()
# using some dummy data for this example
xs = np.arange(0,20,1)
ys = np.random.normal(loc=3, scale=0.4, size=20)
tlab = ['k=' + str(s) for s in range(20)] # label vector
# 'bo' means blue color, round points
plt.plot(xs,ys,'bo')
for x,y in zip(xs,ys):
label = "{:.2f}".format(tlab)
plt.annotate(label, # this is the text
(x,y), # this is the point to label
textcoords="offset points", # how to position the text
xytext=(0,10), # distance from text to points (x,y)
ha='center')
In my original problem, I have the labels in a vector and they are not referencing the coordinates. I know I could perhaps create a counter that loops through the label vector but I'd like to find the most efficient way to write this.
Solution
You could just zip the labels with the xs
and ys
. However, I am not sure why you create a list of strings and try to format it later. In the following solution you could also create the formatted strings as in your example and then later just use that as a label directly.
tlab = range(0, 20) # label vector
# tlab = ['k=' + str(s) for s in range(20)] # label vector
# 'bo-' means blue color, round points, solid lines
plt.plot(xs, ys, 'bo')
for x, y, lab in zip(xs, ys, tlab):
label = '{:.2f}'.format(lab)
plt.annotate(label, # this is the text (put lab here to use tlab as string)
(x, y), # this is the point to label
textcoords="offset points", # how to position the text
xytext=(0, 10), # distance from text to points (x,y)
ha='center')
Plots this:
Answered By - jf_
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.