简体   繁体   中英

Basemap - adding text from shapefile

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM