用python如何画出好看的地图
最近正好在学空间数据处理,这次更一下用python如何画出好看的地图
下面主要是用
folium
poltly
geopandas+matplotlib
三种方式绘制地图
1.folium
import folium
import pandas as pd
#输入上海经纬度,尺度
latitude = 31.2
longitude = 121.5
sh_map = folium.Map(location=[latitude, longitude], zoom_start=10)
sh_map
默认为’OpenStreetMap’风格,我们还可以选择’Stamen Terrain’, 'Stamen Toner’等
sh_map = folium.Map(location=[latitude, longitude], zoom_start=10,tiles='Stamen Toner')
sh_map
有了底图把带有经纬度的数据点映射上去,这里用上次上海poi中的火锅数据
把火锅店数据放到地图上
# 创建特征组
hotpots = folium.map.FeatureGroup()
# Loop through the 200 crimes and add each to the incidents feature group
for lat, lng, in zip(data.lat, data.lon):hotpots.add_child(folium.CircleMarker([lat, lng],radius=7, # define how big you want the circle markers to becolor='yellow',fill=True,fill_color='red',fill_opacity=0.4))# 把火锅特征组放到上海地图上
sh_map =folium.Map(location=[latitude, longitude], zoom_start=10)
sh_map.add_child(hotpots)
点太多看不出什么,我们下面只放嘉定区的数据
我们可以继续添加火锅店名字信息并标注在上图
latitudes = list(datas.lat)
longitudes = list(datas.lon)
labels = list(datas.name)
for lat, lng, label in zip(latitudes, longitudes, labels):folium.Marker([lat, lng], popup=label).add_to(sh_map)
sh_map
最后我们需要绘制每个区的火锅数量的Choropleth Map,不同颜色代表火锅数量
首先读取上海行政区geojson文件
统计各个区火锅数量
hots=data.groupby('adname',as_index=False).agg({'name':"count"})
hots.columns=['district','num']
hots
开始绘制Choropleth Map, 下面key_on='feature.properties.name’是因为我们这里下载的上海geojson中name对应于行政区,这个根据具体数据而定
#输入上海经纬度,尺度
latitude = 31.2
longitude = 121.5
map = folium.Map(location=[latitude, longitude], zoom_start=12)
folium.Choropleth(geo_data=geo_data,data=hots,columns=['district','num'],key_on='feature.properties.name',#fill_color='red',fill_color='YlOrRd',fill_opacity=0.7,line_opacity=0.2,highlight=True,legend_name='Hotpot Counts in Shanghai'
).add_to(map)
map
浦东新区一马当先,嘉定区榜上有名
2.poltly
用poltly画Choropleth Map跟folium很类似,这里直接继续用前面处理好的数据
import plotly.express as px
import plotly.graph_objs as go
latitude = 31.2
longitude = 121.5
fig = px.choropleth_mapbox(data_frame=hots,geojson=geo_data,color='num',locations="district",featureidkey="properties.name",mapbox_style="carto-positron",color_continuous_scale='viridis',center={"lat": latitude, "lon": longitude},zoom=7.5,
)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()
设置mapbox_style="carto-darkmatter"换一种风格
3.geopandas+matplotlib
先利用geopandas绘制出各行政区轮廓
import matplotlib.pyplot as plt
import matplotlib as mpl
# 中文和负号的正常显示
mpl.rcParams['font.sans-serif'] = ['Times New Roman']
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 裁剪上海shape
fig, ax = plt.subplots(figsize=(20, 10))
ax=geo_data.plot(ax=ax,facecolor='grey',edgecolor='white',linestyle='--',alpha=0.8)
ax.axis('off') # 移除坐标轴
将统计的各个区的火锅店数量与geo_data合并
need_data=pd.merge(geo_data,hots[['district','num']],left_on='name',right_on='district')
need_data
此时数据已经是dataframe,不是需要的geodataframe了,所以需要继续转换一下
need_data = gpd.GeoDataFrame(need_data)
need_data.geom_type
可以看到这个时候need_data已经是geodataframe类型了
fig, ax = plt.subplots(figsize=(20, 10))
need_data.plot('num', cmap='OrRd',ax=ax)
ax.axis('off') # 移除坐标轴
cmap = mpl.cm.get_cmap('OrRd')
norm = mpl.colors.Normalize(min(need_data['num']), max(need_data['num']))
fcb = fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap),ax=ax)
ax=geo_data.plot(ax=ax,facecolor='grey',edgecolor='white',linestyle='--',alpha=0.2)
ax.set_title('Hotpot Count in Shanghai', fontsize=20)
不熟悉上海的人是看不出来各个区的,这里可以继续加行政区标注
fig, ax = plt.subplots(figsize=(20, 10))
need_data.plot('num', cmap='OrRd',ax=ax)
for idx, _ in enumerate(need_data.geometry.representative_point()):# 提取行政区名称region = need_data.loc[idx, 'name']ax.text(_.x, _.y, region, ha="center", va="center", size=8)
ax.axis('off') # 移除坐标轴
cmap = mpl.cm.get_cmap('OrRd')
norm = mpl.colors.Normalize(min(need_data['num']), max(need_data['num']))
fcb = fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap),ax=ax)
ax=geo_data.plot(ax=ax,facecolor='grey',edgecolor='white',linestyle='--',alpha=0.2)
ax.set_title('Hotpot Count in Shanghai', fontsize=20)
本文的notebook及数据可公众号后台回复地图获得
用python如何画出好看的地图相关推荐
- python画简便的图-python如何画出漂亮的地图?网友:教教我呗
导入包,创建一副世界地图 不要错过 免费学习Python的机会,快来+688244617 import folium import pandas as pd # define the world ma ...
- 用python绘制漂亮的图形-python如何画出漂亮的地图?
Python地图可视化库有大家熟知的pyecharts.plotly.folium,其他回答都有介绍,还有稍低调的bokeh.basemap.geopandas,也是地图可视化的利器. 首先介绍下bo ...
- Python 如何画出漂亮的地图?
一.关于多样化地图 早期使用Python绘制地图主要是绘制静态地图,现在随着研究深入也会去探索一些新的方法因为Python不仅仅只支持一些静态地图的绘制,动态地图和网络分析图Python其实也不在话下 ...
- python怎么画出好看的统计图_python数据可视化之如何用matplotlib画出漂亮美观的趋势图...
这几天完成了一个小项目,matplotlib画出的图像总是不理想,很多细节需要调节,譬如横坐标的控制.图例的控制.周边留白的控制还有图片大小尺寸的控制,都需要根据业务需求来调整. 下面我一步步来说明 ...
- python画好看的图-python如何画出漂亮的地图?
推荐一个超好用的python包folium, 专门用于地理数据可视化,官方英文教程教程点击这里,查看本文源代码请点击这里. /> 使用方法很简单,操作如下:导入包,创建一副世界地图 import ...
- python画-python如何画出漂亮的地图?
推荐一个超好用的python包folium, 专门用于地理数据可视化,官方英文教程教程点击这里,查看本文源代码请点击这里. /> 使用方法很简单,操作如下:导入包,创建一副世界地图 import ...
- python画简便的图-python如何画出漂亮的地图?
推荐一个超好用的python包folium, 专门用于地理数据可视化,官方英文教程教程点击这里,查看本文源代码请点击这里. /> 使用方法很简单,操作如下:导入包,创建一副世界地图 import ...
- 用python画漂亮图-python如何画出漂亮的地图?
推荐一个超好用的python包folium, 专门用于地理数据可视化,官方英文教程教程点击这里,查看本文源代码请点击这里. /> 使用方法很简单,操作如下:导入包,创建一副世界地图 import ...
- python怎么画出好看的统计图_用最简单的 Python ,画最好看的图 [简单数据可视化]...
可以直接修改参数使用,非常的方便. import numpy as np import pandas as pd import holoviews as hv hv.extension('bokeh' ...
最新文章
- 操作系统学习:实模式进入保护模式
- 科大星云诗社动态20210205
- Groovy 设计模式 -- 抽象工厂 模式
- C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结
- Box Shadow CSS教程–如何向任何HTML元素添加投影
- “约见”面试官系列之常见面试题之第八十八篇之什么是vue生命周期(建议收藏)
- python word2vec 移植_真实资讯语料下的Word2Vec的迁移实践:Tag2Vec
- 一个比较稳定的PLC通讯模块设计
- Across the great wall we can reach every corner in the world
- 01蓝桥杯特训课程第一次总结
- 数据结构实验八 图及其应用
- SpinalNet: Deep Neural Network with Gradual Input
- 3.牛顿迭代法求解方程的根
- iOS开发者比较好用的几个工具
- 语音信号线性预测分析(MATLAB实战篇)
- SQL语句(实用篇)
- 【人脸表情识别】稀疏表示人脸表情识别【含GUI Matlab源码 786期】
- 计算方法实验(四):牛顿迭代法
- 全球及中国城市轨道交通与设备行业布局规划策略及投资模式分析报告2021-2027年版
- 小米笔记本Air 13.3(第7代CPU平台驱动 指纹版)安装WIN7