利用Basemap库 绘制中国 / 世界地图和可视化散点图

中国地图一般按一下步骤绘制:

1. pip安装goes、pyproj、basemap三个库(尽量下载好whl文件再用pip安装);

2. 下载中国大陆和台湾省行政地图信息shp文件(下载地址);

3. 获取各个省省会、直辖市的经纬度信息;

4. 绘制地图;

代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap


fig = plt.figure()
ax = plt.gca()

# region of mainland China and Taiwan
map = Basemap(projection='mill',
            llcrnrlat = 14,    # left corner latitude
            llcrnrlon = 72,    # left corner longitude
            urcrnrlat = 55,    # right corner latitude
            urcrnrlon = 135,   # right corner longitude
            resolution='l', 
            area_thresh=10000)

# map.drawmapboundary(fill_color='aqua')    # foreground color
map.readshapefile('gadm36_CHN_1', 'states', drawbounds=True)    # mainland China
map.readshapefile('gadm36_TWN_1', 'states', drawbounds=True)    # Taiwan Province
# map.drawcoastlines(color='#A8A8A8', linewidth=0.5)

def draw_scatter_map(map, df, lon, lat, label, save=False, save_format='.svg'):
    '''
    Draw the organic food concern map in a specific region or globally.
    :param map: specific region or world map
    :param df: DataFrame type data
    :param lon: longitude
    :param lat: latitude
    :param label: figure label(title)
    :param save: save as the .svg or not
    :param save_format: if save is True, specify the save format
    :return:
    '''
    value = np.array(df['Concern'], dtype=float)
    size = value / np.mean(value) * 35
    x, y = map(lon, lat)
    map.scatter(x, y, s=size, c='r', alpha=0.7, zorder=10)
    ax.set_xlabel(label)
    if save:
        fig.savefig(label+save_format)
    # plt.show()


df = pd.read_csv("./data/organic rice.csv")
lon = np.array(df['longitude'])
lat = np.array(df['latitude'])
draw_scatter_map(map, df, lon, lat, 'organic rice', save=True, save_format='.svg')

效果图:

世界地图相对简单,贴一下代码和效果图:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

df=pd.read_csv("oil map.csv")
fig, ax = plt.subplots()
earth = Basemap(ax=ax)
earth.drawcoastlines(color='#A8A8A8', linewidth=0.5)
ax.scatter(df['lon'], df['lat'], df['organic oil']* 1.5, c='red', alpha=0.7, zorder=10)
ax.set_xlabel("organic oil")
fig.savefig('oil.svg')

猜你喜欢

转载自blog.csdn.net/francislucien2017/article/details/86013292