前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据可视化与basemap数据地图系列2——点线图

Python数据可视化与basemap数据地图系列2——点线图

作者头像
数据小磨坊
发布2018-07-25 11:49:43
3K0
发布2018-07-25 11:49:43
举报
文章被收录于专栏:数据小魔方数据小魔方

前一篇介绍了如何使用mpl_toolkits包中的basemap模块制作填充地图,这一节继续分享线图+点图的应用。

案例一:

1、导入依赖包:

代码语言:javascript
复制
import pandas as pdimport numpy  as npimport matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemap
%matplotlib inline

2、导入制作点线的数据源:

代码语言:javascript
复制
province_city = pd.read_csv("D:/R/rstudy/Province/chinaprovincecity.csv",encoding = "gbk") 
cities = ["北京","上海","天津","重庆","沈阳","呼和浩特","太原","西安","兰州","合肥","南京","杭州","长沙","武汉"]

3、构建线段的起始点数据:

代码语言:javascript
复制
#以郑州为核心,向其他外围城市扩展
new_data = province_city.loc[province_city.city.isin(cities),["city","jd","wd","zhibiao","class"]]
new_data["start_lon"] = province_city.loc[province_city.city == "郑州","jd"].tolist()*len(new_data)
new_data["start_lat"] = province_city.loc[province_city.city == "郑州","wd"].tolist()*len(new_data)#对线段分组设置不同的色值Type_Dict = {  
    "A": "#C72E29",  
    "B": "#016392",  
    "C": "#be9c2e",  
    "D": "#098154",  
    "C": "#fb832d"  
    }  
new_data["Color"] = new_data["class"].map(Type_Dict)
代码语言:javascript
复制
fig = plt.figure(figsize=(20,16))
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
map = Basemap(projection='poly',lat_0=35,lon_0=110,llcrnrlon=80,llcrnrlat=3.01,urcrnrlon=140,urcrnrlat=53.123,resolution='h',area_thresh=1000,rsphere=6371200.,ax = ax1)
map.readshapefile("D:/R/rstudy/CHN_adm/bou2_4p","china",drawbounds=True)
map.drawcoastlines()  
map.drawcountries()    
map.fillcontinents(color = 'coral',alpha = .1) 
map.drawmapboundary()
map.drawparallels(np.arange(0.,90,10.),labels=[1,0,0,0],fontsize=10) 
map.drawmeridians(np.arange(80.,140.,10.),labels=[0,0,0,1],fontsize=10) 

#定义一个勾勒两点之间线段的函数:
def create_great_circles(df):
    for index,row in df.iterrows():
        start_lon = row['start_lon']
        start_lat = row['start_lat']
        end_lon = row['jd']
        end_lat = row['wd']
            if abs(end_lat - start_lat) < 180 and abs(end_lon - start_lon) < 180:
            map.drawgreatcircle(start_lon, start_lat, end_lon, end_lat, linewidth=1,color = "grey")
create_great_circles(new_data)

#定义一个填充散点图颜色、大小的函数:
def create_great_points(df):
    lon   = np.array(new_data["jd"])
    lat   = np.array(new_data["wd"])
    pop   = np.array(new_data["zhibiao"],dtype=float)
    color = new_data["Color"].tolist()
    x,y = map(lon,lat)    for lon,lat,pop,color in zip(x,y,pop,color):
        map.scatter(lon,lat,marker = "o",s = pop*5,color = color)
create_great_points(new_data)
plt.savefig('C:/Users/RAINDU/Desktop/China.png',dpi=100,bbox_inches='tight')
plt.show()

案例二——美国各州航线频次可视化:

从plotly官网下载数据源:

代码语言:javascript
复制
air = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv') #机场航线数据量
flights = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_aa_flight_paths.csv')#机场间航线图

初始化地图背景并添加国界线、海岸线、经纬度线等

代码语言:javascript
复制
fig = plt.figure(figsize=(16,12))
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
map = Basemap(projection='ortho', lat_0=50, lon_0=-100,resolution='l', area_thresh=1000.0,ax = ax1)
map.drawcoastlines()  
map.drawcountries()    
map.fillcontinents(color = 'coral',alpha = .1) 
map.drawmapboundary()
map.drawmeridians(np.arange(0, 360, 30))
map.drawparallels(np.arange(-90, 90, 30))
#定义一个勾勒两点之间线段的函数:

def create_great_circles(df):
    for index,row in df.iterrows():
        start_lon = row['start_lon']
        start_lat = row['start_lat']
        end_lon = row['end_lon']
        end_lat = row['end_lat']
            if abs(end_lat - start_lat) < 180 and abs(end_lon - start_lon) < 180:
            map.drawgreatcircle(start_lon, start_lat, end_lon, end_lat, linewidth=1,color = "#DF666A")
#执行航线绘制函数
create_great_circles(flights)
#定义一个填充散点图颜色、大小的函数:

def create_great_points(df):
    lon   = np.array(df["long"])
    lat   = np.array(df["lat"])
    pop   = np.array(df["cnt"],dtype=float)
    x,y = map(lon,lat)    for lon,lat,pop in zip(x,y,pop):
        map.scatter(lon,lat,marker = "o",s = pop/50,color = "#088158")
#执行散点图填充函数
create_great_points(air)
#保存图表
plt.savefig('C:/Users/RAINDU/Desktop/China1.png',dpi=100,bbox_inches='tight')
plt.show()

到此basemap包的填充地图、线段图、散点(气泡)图都已经介绍完了,是不是效果还不错呢~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从plotly官网下载数据源:
  • 初始化地图背景并添加国界线、海岸线、经纬度线等
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档