底图 - 从 shapefile 添加文本
Basemap - adding text from shapefile
在阅读了关于注释和添加文本的 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
为什么我会收到此错误,我该如何修复它才能将字典中的文本放到绘图中?
要在 (x,y)
位置放置一些文本,您可以使用 plt.text()
而不是 plt.plot()
(因为 plot
绘制的是线图,而不是文本)。
plt.text(x, y, text)
或者在这种情况下
plt.text(x, y, info['LABELNAME'])
在阅读了关于注释和添加文本的 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
为什么我会收到此错误,我该如何修复它才能将字典中的文本放到绘图中?
要在 (x,y)
位置放置一些文本,您可以使用 plt.text()
而不是 plt.plot()
(因为 plot
绘制的是线图,而不是文本)。
plt.text(x, y, text)
或者在这种情况下
plt.text(x, y, info['LABELNAME'])