社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

EasyCharts • 7 年前 • 1097 次点击  

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

案例一:

1、导入依赖包:

import pandas as pdimport numpy  as npimport matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemap
%matplotlib inline

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

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

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


#以郑州为核心,向其他外围城市扩展
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)
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官网下载数据源:

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')#机场间航线图

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

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包的填充地图、线段图、散点(气泡)图都已经介绍完了,是不是效果还不错呢~

https://edu.hellobi.com/course/264

欢迎大家加入EasyCharts-QQ群


如需转载请联系EasyCharts团队!


【书籍推荐】《Excel 数据之美-科学图表与商业图表的绘制》

【手册获取】国内首款-数据可视化参考手册:专业绘图必备

【必备插件】  EasyCharts -- Excel图表插件

【网易云课堂】  Excel 商业图表修炼秘笈之基础篇



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/34Ksh1R8qL
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/12891
 
1097 次点击