怎么用python画省份,区域地图,中国地图

由于在最近科研的过程中,需要画各种图,所以就写了一个工具包,专门用来画省份,区域,整个中国的图,废话不多说,先放github链接,长得好看的兄弟记得给我点个赞,下面只是简单的展示几个案例,更详细的使用方法可以看函数注释。安装很简单,把requirements.txt 里的依赖包装上即可。
下面来看看example.py 里面的样例

  1. 省份降水图(以四川省为例)
def test_plot_roi_image(province='四川省'):
    dataset = xr.open_dataset(r"example_data/example_data.nc") 
    dataset = dataset.rename({"LON": "lon", "LAT": "lat"})
    province_geo = get_province_geometry("shp",province)  # 返回省份的轮廓
    city_info = get_city_geometries("shp",province)  # 返回省会所有的城市信息,为一个字典,键为城市名字,值为城市轮廓
    texts = [] # 需要指明那些城市名字
    inner_geometries = [] # 需要那些内部轮廓,比如成都市的轮廓
    for city_name, city_geo in city_info.items():
        inner_geometries.append(city_geo)  # 积攒所有的城市轮廓
        texts.append((city_name, get_text_position_from_geometry(city_geo)))  # 为每个城市添加名称,可以只为关注的城市添加名字
    roi = extract_roi_from_xr(dataset, box=province_geo.bounds, size=(128, 128))  # 提取省会所需数据
    plot_roi_image(roi.lon.values, roi.lat.values, roi.PRCP.values, ccrs.PlateCarree(), province_geo,
                   inter_geometries=inner_geometries, texts=texts, crop=True,cmap='Greens')

怎么用python画省份,区域地图,中国地图_第1张图片
2. 省份等级图

def test_plot_roi_level(province='四川省'):
    province_geo = get_province_geometry("shp",province)  # 返回省份的轮廓
    city_info = get_city_geometries("shp",province)  # 返回省会所有的城市信息,为一个字典,键为城市名字,值为城市轮廓

    texts = []
    inner_geometries = []
    values = []
    for city_name, city_geo in city_info.items():
        inner_geometries.append(city_geo)  # 积攒所有的城市轮廓
        texts.append((city_name, get_text_position_from_geometry(city_geo)))  # 为每个城市添加名称
        values.append((get_text_position_from_geometry(city_geo),random.randint(1,4)))  # 准备等级数据

    level2color = {1: "blue", 2: "yellow", 3: "orange", 4: "red"}
    level2text = {1: "一般", 2: "较严重", 3: "严重", 4: "特别严重"}
    lon_min, lat_min, lon_max, lat_max = province_geo.bounds
    lon_range = [lon_min - 0.5,lon_max + 0.5]
    lat_range = [lat_min - 0.5,lat_max + 0.5]
    plot_roi_level(lon_range, lat_range,values,ccrs.PlateCarree(), inner_geometries=inner_geometries,
                   outer_geometries=province_geo, texts=texts, level2color=level2color, level2text=level2text)

怎么用python画省份,区域地图,中国地图_第2张图片

  1. 全国等级图
def test_plot_china_level():
    china_geo = get_china_geometry("shp")
    nine_geo = get_nine_geometry("shp")
    provinces_geo = get_province_geometries("shp")
    texts = []
    values = []
    inner_geometries = []
    for name, geometry in provinces_geo.items():
        values.append([get_text_position_from_geometry(geometry), random.randint(1, 4)])
        inner_geometries.append(geometry)
        texts.append((name, get_text_position_from_geometry(geometry))) // 可以只添加几个省份的名
    level2color = {1: "blue", 2: "yellow", 3: "orange", 4: "red"}
    level2text = {1: "一般", 2: "较严重", 3: "严重", 4: "特别严重"}
    lon_min, lat_min, lon_max, lat_max = china_geo.bounds
    lon_range = [lon_min - 0.5,lon_max + 0.5]
    lat_range = [lat_min - 0.5,lat_max + 0.5]

    plot_china_level(lon_range, lat_range, values, ccrs.LambertConformal(central_longitude=107.5,
                                                                                   central_latitude=36.0,
                                                                                   standard_parallels=(25, 47)),
                     inner_geometries=inner_geometries, outer_geometries=china_geo,
                     texts=texts, level2color=level2color, level2text=level2text, nine=nine_geo)

怎么用python画省份,区域地图,中国地图_第3张图片

  1. 全国降水图
def test_plot_china_image():
    dataset = xr.open_dataset(r"example_data/example_data.nc")
    dataset = dataset.rename({"LON": "lon", "LAT": "lat"})
    province_geo = get_province_geometries("shp")
    china = get_china_geometry("shp")
    nine = get_nine_geometry("shp")
    texts = []
    for name, geometry in province_geo.items():
        texts.append((name, get_text_position_from_geometry(geometry)))
    roi = extract_roi_from_xr(dataset, box=china.bounds, size=(512, 512))
    plot_china_image(roi.lon.values, roi.lat.values, value=roi.PRCP.values,
                     proj=ccrs.LambertConformal(central_longitude=107.5,
                                                central_latitude=36.0, standard_parallels=(25, 47)),
                     outer_geometries=china, nine=nine, texts=texts, bar_label="降水",cmap="BuGn")

怎么用python画省份,区域地图,中国地图_第4张图片

  1. 局部区域图
    代码暂时没找到,如果github超过50个星,我再重新写一个上传。出图效果大概如下
    怎么用python画省份,区域地图,中国地图_第5张图片怎么用python画省份,区域地图,中国地图_第6张图片

你可能感兴趣的:(python)