After reading the the basemap tutorial on annotating and adding text, I'm still running into a few issues with this.
shapefile_info = m.readshapefile('/path/to/shapefile', 'shapefile_name')
for info, shape in zip(m.points_info, m.points):
print info, shape
Reading in the shapefile and printing out info (with the above code), we get this output:
{'LABELTYPE': 'ONE', 'LABELNAME': 'Start Point'} (2274311.7551607937, 759422.9640236866)
{'LABELTYPE': 'TWO', 'LABELNAME': 'End Point'} (1839892.6558604166, 947255.0800333266)
Using the code below...
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
l_one, l_two = 0, 0
m = Basemap(projection = 'merc', llcrnrlat= -2, urcrnrlat= 52, llcrnrlon= -137,\
urcrnrlon= -58, lat_ts=40,resolution='i')
m.shadedrelief()
m.drawcoastlines(linewidth=0.5)
m.drawcountries(linewidth=0.5)
m.drawstates(linewidth=0.5)
m.drawparallels(np.arange(-90, 90, 10), linewidth = 0.2,
labels = [True, False, True, False], fontsize = 'x-small')
m.drawmeridians(np.arange(-180, 180, 10), linewidth = 0.2,
labels = [False, False, False, True], fontsize = 'x-small')
m.readshapefile('/path/to/shapefile', 'shapefile_name')
shapefile_info = m.readshapefile('/path/to/shapefile', 'shapefile_name')
for info, shape in zip(m.points_info, m.points):
x, y = zip(shape)
if info['LABELTYPE'] == 'ONE':
m.plot(x, y, c = 'k', ms = 9., ls = "", mew = 1.,
label = 'Start Point' if l_one == 0 else "_no-legend_")
x, y = m(y[0], x[0])
plt.plot(x, y, info['LABELNAME'])
l_one += 1
if info['LABELTYPE'] == 'TWO':
m.plot(x, y, c = 'c', ms = 9., ls = "", mew = 1.,
label = 'End Point' if l_two == 0 else "_no-legend_")
x, y = m(y[0], x[0])
plt.plot(x, y, info['LABELNAME'])
l_two += 1
I get the following error: Illegal format string "Start Point"; two linestyle symbols
Illegal format string "Start Point"; two linestyle symbols
Why is it I get this error, and how do I go about fixing it so I'm able to put the text from the dictionary onto the plot?
To put some text at position (x,y)
you would use plt.text()
instead of plt.plot()
(as plot
plots a lineplot, not a text).
plt.text(x, y, text)
or in this case
plt.text(x, y, info['LABELNAME'])
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.