独立于图例(?)处理绘图中的数据-Python

独立于图例(?)处理绘图中的数据-Python,python,matplotlib,plot,matplotlib-basemap,Python,Matplotlib,Plot,Matplotlib Basemap,假设我们从一个经常更改值的源导入shapefile。其中一个形状文件包含1到5之间的值,但大小和值不同(例如,第一次从源抓取形状文件时,它包含1个值。下次从源抓取形状文件时,它包含4个值)。另一个形状文件包含动物名称,但只有3种可能性,与第一个形状文件一样,它可以根据其值的多少而变化 假设shapefile1包含“2”和“3”,而当我们第一次获取zip文件时,shapefile2包含“Horse”。在图例中,我只希望“2”、“3”和“Horse”显示正确的图标(请参见下面的脚本)。下次运行该程序

假设我们从一个经常更改值的源导入shapefile。其中一个形状文件包含1到5之间的值,但大小和值不同(例如,第一次从源抓取形状文件时,它包含1个值。下次从源抓取形状文件时,它包含4个值)。另一个形状文件包含动物名称,但只有3种可能性,与第一个形状文件一样,它可以根据其值的多少而变化

假设shapefile1包含“2”和“3”,而当我们第一次获取zip文件时,shapefile2包含“Horse”。在图例中,我只希望“2”、“3”和“Horse”显示正确的图标(请参见下面的脚本)。下次运行该程序并获取zip文件夹时,shapefile1包含“1”、“2”、“4”、“5”,而shapefile2包含“Bird”、“Cat”。图例应该有“1”、“2”、“4”、“5”、“鸟”、“猫”

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import requests, zipfile, io

def plot_stuff_sf1(x, y, color):
    m.plot(x, y, c = color, mec = 'k', m = 'o', ms = 5., ls = None, mew = 1.)

def plot_stuff_sf2(x, y, marker):
    m.plot(x, y, color = 'c', mec = 'k', m = marker, ms = 5., ls = None, mew = 1.)

#gets zipped file and stores on computer
zip_file_url = 'zippedfile/location'
r = requests.get(zip_file_url)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall('/path/to/save/files')

m = Basemap(projection = 'merc', llcrnrlat= 90, urcrnrlat= -90,
             llcrnrlon= -180, urcrnrlon= 180, lat_ts=40,resolution='i') 
m.readshapefile('/path/to/shapefile', 'name')
points_info = m.readshapefile('/path/to/shapefile', 'name')
for info, shape in zip(m.name_info, m.name):
    x, y = zip(shape)
    if info['NUMBER'] == '1':
        plot_stuff_sf1(x, y, 'c')
    elif info['NUMBER'] == '2':
        plot_stuff_sf1(x, y, 'm')
    elif info['NUMBER'] == '3':
        plot_stuff_sf1(x, y, 'g')
    elif info['NUMBER'] == '4':
        plot_stuff_sf1(x, y, 'r')
    elif info['NUMBER'] == '5':
        plot_stuff_sf1(x, y, 'k')

m.readshapefile('/path/to/shapefile2', 'name2')
name_info2 = m.readshapefile('/path/to/shapefile2', 'name2')
for info, shape in zip(m.name_info2, m.name2):
    x, y = zip(shape)
    if info['VALUE'] == 'Bird':
        plot_stuff_sf2(x, y, 'o')
    elif info['VALUE'] == 'Horse':
        plot_stuff_sf2(x, y, 'D')
    elif info['VALUE'] == 'Cat':
        plot_stuff_sf2(x, y, '>')

我没有包括图例代码,因为那是我被绊倒的地方。我查看了文档并尝试了
plt.legend(handles=[…])
,但由于某种原因,它不起作用(即使我从文档中复制/粘贴代码并将其与脚本集成时也是如此).

这有点奇怪,可能会使您无法获得故意不包含导致问题的代码部分的答案。例如,您可能会看到一个使用图例的示例,该图例依赖于形状文件的项。但由于目前还不清楚这个问题在哪里,我不确定它是否有帮助。我确实偶然发现了这个联系,它部分回答了我的问题。我会继续玩弄他们所做的,看看我能不能让它发挥作用。我没有包括这个传说,我想让任何想回答的人都可以自由选择。因为我是在链接问题中写下这个答案的人,我怀疑我也能帮助解决这个问题,只是我不太理解这里的问题,而且事实上没有一个可用的答案,实际上产生问题的代码也不是最有可能的原因。