在每个大陆上为散点提供不同的颜色[Python]

时间:2016-04-09 21:10:49

标签: python global matplotlib-basemap scatter labeling

我已经被困了几个小时完成一项任务。

我有一个excel文件,所有城市都有300000多个居民+坐标。我必须在全球地图上绘制它们。为此,我有以下代码:

from IPython import get_ipython
get_ipython().magic('reset -sf') 
get_ipython().magic('matplotlib')
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame
plt.close('all')
#%%
dirname=('C:\\Users\\Guido\\Documents\\Geologie\\Programmeren\\Scripts van mij\\Deftig\\')
filename='WUP2014-F12-Cities_Over_300K.xls'
xlsfile = pd.ExcelFile(dirname + filename)
drframe = xlsfile.parse("DATA", skiprows = 16)
urbpop = DataFrame(drframe)
lat = urbpop["Latitude"]
lon = urbpop["Longitude"]
m = Basemap(projection='robin',lon_0=0,resolution='c')
m.drawcoastlines()
m.drawcountries()
lons,lats = m(list(lon), list(lat))
m.scatter(lons, lats, s = 1.3, color ='blue')

The excel-file looks like this

The output figure looks like this

现在我必须在每个大陆上给出另一种颜色的点数(例如南美橙色,欧洲蓝色......)。

此外,我必须用居民数量标记每个点。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您应该以某种方式将excel文件的大陆信息作为不同的列提供,或者您可以创建自己的文件,例如json格式的continent.dat或其他。

{ 'south-america': ['Argentina', ,'Brazil', ...],
  'north-america': ['Canada', 'United States', ...],
  ... 
}

使用此信息,您可以重新组合人口数据框数据。完成后,您可以通过指定不同的颜色来跟踪每个大洲的流程。

如果要将大陆信息添加到Excel文件中,Pandas groupby可能是一个很好的方法。

http://pandas.pydata.org/pandas-docs/stable/groupby.html