简体   繁体   English

底图-从shapefile添加文本

[英]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: 读入shapefile并打印出信息(使用上面的代码),我们得到以下输出:

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

{'LABELTYPE': 'TWO', 'LABELNAME': 'End Point'} (1839892.6558604166, 947255.0800333266) {'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错误的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). 要将某些文本放在(x,y)位置(x,y)可以使用plt.text()而不是plt.plot() (因为plot绘制的是线图,而不是文本)。

plt.text(x, y, text)

or in this case 或者在这种情况下

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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