底图 - 从shapefile

时间:2017-06-26 15:20:09

标签: python matplotlib matplotlib-basemap

在阅读the basemap tutorial注释并添加文字后,我仍然遇到了一些问题。

shapefile_info = m.readshapefile('/path/to/shapefile', 'shapefile_name')
for info, shape in zip(m.points_info, m.points):
    print info, shape

读取shapefile并打印出信息(使用上面的代码),我们得到了这个输出:

  

{' LABELTYPE':' ONE',' LABELNAME':' Start Point'}(2274311.7551607937,759422.9640236866)

     

{' LABELTYPE':' TWO',' LABELNAME':' End Point'}(1839892.6558604166,947255.0800333266)

使用以下代码......

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

我收到以下错误: Illegal format string "Start Point"; two linestyle symbols

为什么我会收到此错误,如何解决这个问题,以便我能够将字典中的文字放到情节中?

1 个答案:

答案 0 :(得分:1)

要将一些文字放在(x,y)位置,您可以使用plt.text()代替plt.plot()(因为plot会绘制一个线图,而不是文字)。

plt.text(x, y, text)

或在这种情况下

plt.text(x, y, info['LABELNAME'])