basemap生成地图散点图

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43089813/article/details/89384661

一,简介:
最近想将微信好友的所在城市画在地图上,可以使用basemap,但搜索了很久,也没找到一个适合的案例,大家基本上讲得不明不白,很多人甚至只是转载别人的做法,或者颜色和散点的大小是通过data预先设计好的。
我需要根据分布比例的大小来计算散点的大小,并通过一组颜色管理方案随机分配颜色,现在我做出来了,分享给大家。
二,实现的思路:
1,绘制地图,引用中国和台湾地图,如果你是外国友人,好友主要分布在国外,也可以使用世界地图;
2,统计各个城市好友的数量,映射好友所在城市:城市经纬度坐标形成字典;
3,统计同一个城市好友的数量,映射成城市:数量形成字典;
4,使用range(len(城市的数量))和plt.cm.parameter生成系列颜色的映射并显示在图表上。
三,效果图(只是我的好友集中分布于一个城市,数据比例看起来不太协调)
在这里插入图片描述
四,代码。

def drawFriendCityMap():
    posDict=getFriendArea()
    plt.figure(figsize=(9.87,6.92))
    m=Basemap(projection='aea',llcrnrlon=79,llcrnrlat=14,urcrnrlon=138,urcrnrlat=52,lat_0=25,lon_0=110)
    m.readshapefile('.\gadm36_CHN_shp\gadm36_CHN_1','states',drawbounds=True)
    m.readshapefile('.\gadm36_TWN_shp\gadm36_TWN_0','states',drawbounds=True)
    m.shadedrelief()#etopo绘制地形图,shadedrelief是浮雕图,默认是空白轮廓图
    fo=open('data.txt','r',encoding='utf-8-sig').readlines()#所有城市坐标的data
    wechatPos={}
    for k,v in posDict.items():
        for j in fo:
            a=j.split(',')
            if k in a[0]:#如果好友城市在所有城市列表中,将其加入新字典wechpos
                wechatPos.update({k:(eval(a[1]),eval(a[2]))})
    print(wechatPos)
    x1=[]
    y1=[]
    size=[]
    for k,v in wechatPos.items():
        x1.append(v[0])
        y1.append(v[1])
        size.append(posDict.get(k))
    x,y=m(x1,y1)
    m.scatter(x,y,marker='o',s=[v*10 for v in size],c=range(len(wechatPos)),cmap=plt.cm.Set1)#c=range(len(wechatPos)),cmap=plt.cm.viridis
    plt.subplots_adjust(left=0, bottom=0, right=1, top=1,hspace=0.1,wspace=0.1)#左下为0右上为1时绘图区全屏
    plt.savefig('好友分布图.jpg',dpi=120)

完毕。

展开阅读全文

没有更多推荐了,返回首页