用python 画美国地图

我想用python 画中国和美国的地图,刚刚学会了画美国地图,特做一个记录。

当然首先是用google 找网上资料。

找到下面的链接:https://stackoverflow.com/questions/42463200/draw-state-abbreviations-in-matplotlib-basemap

下面的代码基本来自这里的回答2,就是标记为答案的回答。

直接运行,发现缺省地形文件,在这里找到了:https://github.com/matplotlib/basemap/tree/master/examples

这里还顺便找了一个画美国地图的文件,名字是:fillstates.py,大家可以去下载。

先把我上面的代码,并修改调试好了的列出来:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap as Basemap
from matplotlib.patches import Polygon

plt.figure(figsize=(18,9))

short_state_names = {
        'AK': 'Alaska',
        'AL': 'Alabama',
        'AR': 'Arkansas',
        'AS': 'American Samoa',
        'AZ': 'Arizona',
        'CA': 'California',
        'CO': 'Colorado',
        'CT': 'Connecticut',
        'DC': 'District of Columbia',
        'DE': 'Delaware',
        'FL': 'Florida',
        'GA': 'Georgia',
        'GU': 'Guam',
        'HI': 'Hawaii',
        'IA': 'Iowa',
        'ID': 'Idaho',
        'IL': 'Illinois',
        'IN': 'Indiana',
        'KS': 'Kansas',
        'KY': 'Kentucky',
        'LA': 'Louisiana',
        'MA': 'Massachusetts',
        'MD': 'Maryland',
        'ME': 'Maine',
        'MI': 'Michigan',
        'MN': 'Minnesota',
        'MO': 'Missouri',
        'MP': 'Northern Mariana Islands',
        'MS': 'Mississippi',
        'MT': 'Montana',
        'NA': 'National',
        'NC': 'North Carolina',
        'ND': 'North Dakota',
        'NE': 'Nebraska',
        'NH': 'New Hampshire',
        'NJ': 'New Jersey',
        'NM': 'New Mexico',
        'NV': 'Nevada',
        'NY': 'New York',
        'OH': 'Ohio',
        'OK': 'Oklahoma',
        'OR': 'Oregon',
        'PA': 'Pennsylvania',
        'PR': 'Puerto Rico',
        'RI': 'Rhode Island',
        'SC': 'South Carolina',
        'SD': 'South Dakota',
        'TN': 'Tennessee',
        'TX': 'Texas',
        'UT': 'Utah',
        'VA': 'Virginia',
        'VI': 'Virgin Islands',
        'VT': 'Vermont',
        'WA': 'Washington',
        'WI': 'Wisconsin',
        'WV': 'West Virginia',
        'WY': 'Wyoming'
}

m = Basemap(llcrnrlon=-119,llcrnrlat=22,urcrnrlon=-64,urcrnrlat=49,
            projection='lcc',lat_1=33,lat_2=45,lon_0=-95)
# data from U.S Census Bureau
# http://www.census.gov/geo/www/cob/st2000.html
shp_info = m.readshapefile('st99_d00','states',drawbounds=True)
printed_names = ['HI','AK']

for shapedict,state in zip(m.states_info, m.states):
    short_name = list(short_state_names.keys())[list(short_state_names.values()).index(shapedict['NAME'])]
    if short_name in printed_names: continue
    # center of polygon
    x, y = np.array(state).mean(axis=0)
    # You have to align x,y manually to avoid overlapping for little states
    plt.text(x+.1, y, short_name, ha="center")
    printed_names += [short_name,] 
    #print(x,y,short_name)

m.drawparallels(np.arange(25,65,20),labels=[1,0,0,0])
m.drawmeridians(np.arange(-120,-40,20),labels=[0,0,0,1])
plt.title('The United States of North America')
plt.show()

 我对原来的代码做了一点修改,开始的时候总是报错。

short_name = short_state_names.keys()[short_state_names.values().index(shapedict['NAME'])]
    

修改为:

short_name = list(short_state_names.keys())[list(short_state_names.values()).index(shapedict['NAME'])]

就是加了2个list, 我一个朋友(海鹰)帮我修改的,在此感谢他。

开始的时候地图比较小,添加了 

plt.figure(figsize=(18,9))

这样地图大了一点。还有AK,HI 离美国本地太远,后来去掉了这2个的标记,printed_names初始加了这2个。

#print(x,y,short_name) 开始测试用了,现在也注释掉了。

最后地图结果是这样的:

我运行fillstates.py ,结果是这样的,彩色的,颜色标示人口密度,但没有标注州名:

还没有找到中国地图的数据,下一步画出中国地图来。

猜你喜欢

转载自blog.csdn.net/leon_zeng0/article/details/105723341