python绘制世界地图
- 格式:doc
- 大小:22.00 KB
- 文档页数:4
一、介绍Python是一种高级编程语言,被广泛应用于科学计算、数据分析和可视化等领域。
而basemap则是Python中用于绘制地理信息数据的工具库,它基于Matplotlib,可以帮助开发者轻松地创建各种地图投影,并在地图上添加各种元素。
本文将详细介绍Python中basemap的用法,包括安装、基本绘图、地图投影等方面。
二、安装要使用basemap,首先需要安装它。
可以通过pip命令在终端中安装basemap:```pythonpip install basemap```在安装过程中可能会遇到一些依赖库的安装问题,建议事先了解并解决这些问题。
三、基本绘图1. 导入basemap库在Python脚本中,首先要导入basemap库:```pythonfrom mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as plt```2. 创建地图对象接下来可以创建一个地图对象,并设置地图的中心位置、缩放比例、投影方式等参数:```pythonmap = Basemap(projection='merc', llcrnrlat=-80, urcrnrlat=80, llcrnrlon=-180, urcrnrlon=180, lat_ts=20, resolution='c')```其中projection参数用于指定地图投影类型,llcrnrlat和urcrnrlat用于设置地图的纬度范围,llcrnrlon和urcrnrlon用于设置地图的经度范围,lat_ts用于设置真实纬度的伪吸收者纬度,resolution用于设置地图的精细程度。
3. 绘制地图有了地图对象之后,就可以开始在地图上绘制各种元素了,比如陆地、海洋、国界线、河流等等。
以绘制陆地和海洋为例,可以使用下面的代码:```pythonmap.drawcoastlines()map.drawcountries()map.fillcontinents(color='coral', lake_color='aqua')map.drawmapboundary(fill_color='aqua')```四、地图投影地图投影是指将地球表面的三维坐标转换为平面上的二维坐标,以便在地图上进行绘制和标注。
map用法python -回复如何使用Python中的地图(Maps)功能地图在日常生活中扮演着重要的角色,无论是查找位置、规划路线还是探索地理信息,地图都是不可或缺的工具。
Python作为一种流行的编程语言,也提供了各种库和模块来处理地理空间数据。
其中之一是地图(Maps)功能,它可以帮助我们在Python中创建、可视化和分析地理空间数据。
本文将一步一步地介绍如何使用Python中的地图功能。
第一步:安装必要的库在开始之前,我们需要确保已经安装了以下必要的库:- `geopandas`: 用于处理地理空间数据的Python库。
- `matplotlib`: 用于绘制地图数据的Python库。
- `descartes`: 用于绘制地图数据的Python库的补充。
- `contextily`: 用于添加地图背景图的Python库。
我们可以通过在终端或命令提示符中运行以下命令来安装这些库:pip install geopandas matplotlib descartes contextily第二步:导入必要的模块一旦我们安装了这些库,我们需要在Python脚本中导入它们。
打开你喜欢的Python编辑器,并添加以下导入语句:pythonimport geopandas as gpdimport matplotlib.pyplot as pltfrom descartes import PolygonPatchimport contextily as ctx第三步:创建地图现在我们已经准备好开始创建地图了。
我们将从一些地理空间数据开始,可以使用常用的数据格式,如Shapefile、GeoJSON等。
假设我们有一个名为`world.shp`的Shapefile文件,其中包含了全球各个国家的边界信息。
我们可以使用`geopandas`库中的`read_file()`函数读取这个Shapefile文件:pythonworld = gpd.read_file('world.shp')接下来,我们可以使用`matplotlib`库来绘制这个地图,并且为每个国家添加不同的颜色来区分。
Cmaps是一个在Python中用于创建概念地图的开源工具。
概念地图是一种可以帮助人们组织和理清思维的图形化工具,它可以帮助用户将各种概念、主题和想法进行整理和连接,从而更好地理解和分析知识。
Cmaps提供了丰富的功能和灵活的应用方式,让用户可以根据自己的需求进行定制和使用。
在本篇文章中,我们将重点介绍Cmaps在Python中的使用方法,包括安装、基本操作和高级功能等方面的内容。
通过学习本文,读者将能够对Cmaps有一个较为全面的了解,并能够在实际的工作和学习中灵活运用Cmaps来进行知识整理和思维导图的创建。
一、Cmaps的安装在使用Cmaps之前,首先需要安装Cmaps的Python库。
Cmaps 的Python库可以通过pip来安装,只需要在命令行中输入以下命令即可完成安装:```shellpip install cmaps```二、Cmaps的基本操作安装完成之后,就可以开始使用Cmaps来创建概念地图了。
下面我们将介绍Cmaps的基本操作步骤。
1. 创建概念地图我们需要创建一个新的概念地图。
在Python中,可以通过以下代码来创建一个空的概念地图对象:```pythonimport cmapscmap = cmaps.CMap()```通过上面的代码,我们成功创建了一个空的概念地图对象cmap。
接下来,我们就可以开始向这个概念地图对象中添加节点和连接线了。
2. 添加节点和连接线在概念地图中,节点代表着不同的概念或主题,而连接线则代表着节点之间的关联关系。
通过Cmaps,我们可以轻松地添加节点和连接线。
我们可以使用以下代码来向概念地图中添加一个节点:```pythonnode1 = cmap.add_node("Node 1")```上面的代码将在概念地图中添加了一个名为"Node 1"的节点,并将其赋值给了变量node1。
同样地,我们可以添加多个节点,并使用连接线将它们关联起来。
Python数据可视化库Geopandas入门学习使用Geopandas进行地理数据可视化在现代数据科学领域中,数据可视化是一项至关重要的技能。
通过可视化地展示数据,我们能够更好地理解和解释数据背后的模式和关系。
而在地理数据分析领域,Geopandas是一个功能强大且易于使用的Python库,它可以帮助我们处理地理空间数据,并进行高质量的地理数据可视化。
一、Geopandas简介Geopandas是一个开源的Python库,它结合了pandas和其他地理空间库的功能,使我们能够更容易地处理地理空间数据。
Geopandas的主要特点包括:1. 支持多种地理空间数据格式,如Shapefile、GeoJSON等。
2. 提供了一系列功能强大的地理空间操作和分析工具,如空间关系判断、投影转换等。
3. 兼容pandas库的数据结构,方便进行数据的整合和分析。
二、安装Geopandas在使用Geopandas之前,需要先安装该库及其依赖库。
可以通过pip命令进行安装:```pip install geopandas```安装完毕后,我们可以使用以下代码验证安装是否成功:```pythonimport geopandas as gpdworld = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))world.plot()```如果能够成功绘制世界地图,则说明Geopandas安装成功。
三、地理数据可视化示例下面通过一个简单的示例,来演示如何使用Geopandas进行地理数据的可视化。
```pythonimport geopandas as gpdimport matplotlib.pyplot as plt# 读取地图数据world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))# 绘制世界地图world.plot()# 设置图像标题和轴标签plt.title('World Map')plt.xlabel('Longitude')plt.ylabel('Latitude')# 显示图像plt.show()```以上代码首先使用Geopandas读取了世界地图的数据,然后通过plot()函数绘制地图。
利⽤python绘制中国地图(含省界、河流等)我们可以使⽤Basemap这个⼯具包来实现中国地图的绘制⾸先需要加载⼀些包:import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.basemap import BasemapBasemap包就是⽓象画图的利器,现在我们就可以愉快的画图了!plt.figure(1)map=Basemap()map.drawcoastlines()plt.title(r'$World\ Map$',fontsize=24)plt.show()第2⾏创建⼀个地图,第3⾏添加海岸线,这样⼀个世界地图就出来了,怎么样,很简单吧。
(plt.show()这⾏代码是⽤来显⽰图⽚的)我们发现这只是海岸线图,那么怎么将国界线添加上去呢?很简单,只要添加⼀⾏代码就可以了。
map.drawcountries()那么怎么添加河流呢?可能有些同学已经猜到了,就是drawrivers()map.drawrivers(color='blue',linewidth=0.3)好了,现在我们可以开始画中国地图了!其实只要在创建地图时指定⼀下范围就可以了,查阅资料发现,中国的经纬度范围是东经135度2分30秒-东经73度40分,北纬3度52分-北纬53度33分。
map=Basemap(llcrnrlon=70,llcrnrlat=3,urcrnrlon=139,urcrnrlat=54)CHN='G:\python_material\MapOfChina'CHN的值就是解压后的地图⽂件所在的地址。
下⾯我们就可以加⼊省界了!map.readshapefile(CHN+'\gadm36_CHN_shp\gadm36_CHN_1','states',drawbounds=True)别忘了把台湾省加上去map.readshapefile(CHN+'\gadm36_TWN_shp\gadm36_TWN_1','taiwan',drawbounds=True)还可以在地图上加上经纬度,⽐如我们要画5条经纬线,可以这么做:parallels = np.linspace(3,55,5)map.drawparallels(parallels,labels=[True,False,False,False])meridians = np.linspace(70,140,5)map.drawmeridians(meridians,labels=[False,False,False,True])⼤功告成!但是,emmm,我们发现好像有点歪?我们可以在创建地图时选择投影参数。
geopandas-python中地理信息绘图利器在python中,我们通常使用seaborn或者matplotlib来进行数据的可视化。
但在涉及到地理位置信息的可视化问题时,python中的geopandas模块可以帮助我们更加快速的生成想要的图片。
这里我们以geopandas内置的世界数据为例首先导入所需的包,读取世界数据:import geopandas as gpimport foliumimport matplotlib.pyplot as pltfrom cartopy import crs as ccrs%matplotlib inlinegp_world = gp.read_file(gp.datasets.get_path('naturalearth_lowres'))#首先观察数据的前几行gp_world.head()世界数据读取城市数据:gp_cities = gp.read_file(gp.datasets.get_path('naturalearth_cities'))gp_cities. head()城市数据绘制出世界地图:ax = gp_world.plot()世界地图绘制除去南极洲外的数据:mask = (gp_world['name'] != 'Antarctica') & (gp_world['pop_est'] > 0)gp_world = gp_world[mask]ax = gp_world.plot()世界地图(除南极洲)绘制世界人口分布:fig, ax = plt.subplots(figsize=(9, 9))ax = gp_world.plot(ax=ax, column='pop_est')世界人口分布绘制世界人均GDP:#计算人均GDPgp_world['gdp_per_cap'] = gp_world.gdp_md_est / gp_world.pop_estfig, ax = plt.subplots(figsize=(12, 12))ax = gp_world.plot(ax=ax, column='gdp_per_cap', cmap='inferno_r', edgecolor='k', lw=0.2)#关闭坐标轴ax.axis('off')plt.show()世界人均GDP分布绘制国家轮廓及城市地理位置:fig, ax = plt.subplots(figsize=(12, 12))#画出国家的轮廓ax = gp_world.plot(ax=ax, color='w', edgecolor='#aaaaaa', lw=1)#画出城市的位置ax = gp_cities.plot(ax=ax, color='none', edgecolor='#003366', lw=2, alpha=0.7)#关闭坐标轴ax.axis('off')plt.show()城市与国家将两个数据集合并,绘制出城市分布:#将两个数据集合并gp_cities_countries = gp.sjoin(gp_cities, gp_world, how='inner', op='within')fig, ax = plt.subplots(figsize=(12, 12))ax = gp_world.plot(ax=ax, color='#eeeeee', edgecolor='#999999', lw=1)ax = gp_cities_countries.plot(ax=ax, column='gdp_per_cap', cmap='inferno_r', edgecolor='k', lw=1, alpha=0.8)ax.axis('off')plt.show()合并后的城市与国家使用不同的colormap绘图:cmaps = ['viridis', 'plasma', 'inferno', 'YlOrRd', 'YlGnBu', 'summer', 'autumn', 'bone', 'RdPu']fig, axes = plt.subplots(3, 3, figsize=(12, 8), facecolor='#333333')for cmap, ax in zip(cmaps, axes.flatten()): ax = gp_world.plot(ax=ax, cmap=cmap) ax.set_title(cmap, color='w') ax.axis('off')plt.show()不同的colormap效果通过观察数据集,我们可以看到geopandas模块主要是通过geometry这一特征来进行地图的绘制。
pyecharts的map的用法pyecharts是Python中一款基于Echarts的数据可视化库,可以通过简单的Python代码生成高质量的图表,包括折线图、柱状图、散点图等等。
其中,pyecharts的map模块可以用于绘制各省市地图,并展示相关的数据。
本文将详细介绍pyecharts的map模块的使用方法,一步一步回答中括号内的内容。
1. pyecharts的map模块介绍pyecharts的map模块是为了能够在地图上展示相关的数据而设计的。
它提供了各个级别的地图,包括全国、各省、各市等,可以通过简单的代码实现数据的可视化展示。
2. 准备工作在开始使用pyecharts的map模块之前,我们需要先安装相应的库。
可以通过以下代码来安装pyecharts和相关依赖库:pip install pyecharts安装完成后,我们可以导入pyecharts的map模块,以便后续使用:pythonfrom pyecharts.charts import Map3. 创建地图实例在使用map模块之前,我们需要创建一个地图实例。
可以通过以下代码创建一个全国地图的实例:pythonmap_instance = Map()4. 添加数据接下来,我们需要向地图实例中添加相关的数据。
可以使用`add` 方法来添加数据。
具体添加的数据格式是一个列表,每个列表项包含两个值,第一个值表示地点名称,第二个值表示该地点对应的数据。
以绘制全国各省份的地图为例,我们可以通过以下代码添加数据:pythonmap_instance.add("全国各省份", provinces, values)其中,`provinces` 是一个包含各个省份名称的列表,`values` 是一个包含各个省份对应数据的列表。
5. 设置地图参数在绘制地图之前,我们可以通过设置地图的参数来调整显示效果。
可以使用`set_global_opts` 方法来设置地图参数。
Python地图可视化:folium绘制轨迹folium安装我是直接使⽤anaconda prompt安装:pip install folium绘制路径folium的坐标系是WGS84坐标系。
import foliumimport osimport pandas as pdimport numpy as npdef read_gps_data(path):P = pd.read_csv(path, header=None, dtype=np.double).values # 读取csv⽂件,输出为narraylocations_nav = P[:, 0:2].tolist() # narray转换成listlocations_true = P[:, 2:4].tolist()return locations_nav, locations_truedef draw_gps(locations_nav, locations_true, output_path, file_name):"""绘制gps轨迹图:param locations: list, 需要绘制轨迹的经纬度信息,格式为[[lat1, lon1], [lat2, lon2], ...]:param output_path: str, 轨迹图保存路径:param file_name: str, 轨迹图保存⽂件名:return: None"""m = folium.Map(locations_true[0], zoom_start=30, attr='default') # 中⼼区域的确定folium.PolyLine( # polyline⽅法为将坐标⽤实线形式连接起来locations_true, # 将坐标点连接起来weight=4, # 线的⼤⼩为4color='red', # 线的颜⾊为红⾊opacity=0.8, # 线的透明度).add_to(m) # 将这条线添加到刚才的区域m内folium.PolyLine( # polyline⽅法为将坐标⽤虚线形式连接起来locations_nav, # 将坐标点连接起来weight=2, # 线的⼤⼩为2color='blue', # 线的颜⾊为蓝⾊opacity=0.8, # 线的透明度dash_array='5' # 虚线频率).add_to(m) # 将这条线添加到刚才的区域m内# 起始点,结束点folium.Marker(locations_true[0], popup='<b>Starting Point</b>').add_to(m)folium.Marker(locations_true[-1], popup='<b>End Point</b>').add_to(m)m.save(os.path.join(output_path, file_name)) # 将结果以HTML形式保存到指定路径if __name__ == '__main__':path1 = '../gps/385276_pos.csv' # 前两列预估值,后两列真值locations_nav, locations_true = read_gps_data(path1)draw_gps(locations_nav, locations_true, '../drawing', '385276.html')⽤浏览器打开html⽂件:。
作图详解利⽤Python绘制地图(第⼀辑)1. 安装包及地理信息准备对于使⽤pyecharts 0.3.2以上版本的⼩伙伴,使⽤地图需要额外安装地图扩展包。
可以直接在anaconda prompt中运⾏以下命令安装地图扩展包后,再继续下述程序(安装扩展包的相关连接:作图详解|Anaconda扩展包的安装及bug处理)。
pip install echarts-countries-pypkgpip installecharts-china-provinces-pypkgpip installecharts-china-cities-pypkg2. 数据准备这次我们来做体现某⼀领域⽬标市场分布情况的散点地图和热⼒地图。
⾸先在INCOPAT中检索并下载数据,注意下载的数据中要有“公开(公告)号”字段,因为后⾯的程序中是从“公开(公告)号”字段中提取公开号前两位字母,即国别代码,代表公开国家。
3. 国别代码与地理位置的对应数据准备⼩编已经贴⼼地为⼤家准备好了国别代码对应地理坐标的数据和国别代码对应国家名称的数据(链接: https:///s/1MJfGcFyBUVy25MOmV6wyjg 密码: i4cw)。
下载好之后,可以直接使⽤pandas打开。
部分国别代码与地理坐标的数据的⽂本截图如下:国别代码对应国家名称的数据⽂本截图如下:4. 作图过程导⼊所需的包:import pandas as pd#导⼊pandasimport numpy as np#导⼊numpyfrom pyecharts import Geo#导⼊绘制地图扩展包读⼊待⽤数据:df=pd.read_excel('2018-04-26.xls',sheetname='sheet1')#打开excel数据表df1=pd.read_table('国别代码对应列表.txt',index_col='CC')#打开国别代码⽂件df2=pd.read_csv('国家-纬度-经度.txt')#打开国家坐标⽂件准备备⽤变量:country_dic={}#备⽤字典变量,⽤于存储国家信息country_list=[]#备⽤列表,⽤于存储国家信息country_loc_dic#={}#备⽤字典,⽤于存储国家坐标抽取信息,写⼊备⽤变量中:for i in df['公开(公告)号']:#对公开号进⾏循环if not pd.isnull(i):#如果不是空⽩数据if not (i[:2]== 'WO' or i[:2]=='EP'):#丢弃WO和EPcountry_list.append(df1.loc[i[:2]][0])#从公开号前两位抽取国家代码,查表找到对应的中⽂country_dic[str(df1.loc[i[:2]][0])]=0#字典中加⼊该国家,计数设置为0country_loc_dic[str(df1.loc[i[:2]][0])]=[df2.loc[i[:2]][1],df2.loc[i[:2]][0]]#查表更新坐标字典统计每个国家对应的专利申请数量,并⽣成pyecahrts绘图所需数据格式:for i in country_list:#统计每个国家的专利数量country_dic[i] =1data = [(i,country_dic[i]) for i incountry_dic]#⽣成pyecharts所需的数据格式对于普通散点地图,绘图程序如下:geo = Geo('申请量分布图','', title_color='#fff',title_pos='center', width=1200,height=600, background_color='#404a59')#实例化⼀类attr, value = geo.cast(data)#从传递的数据中抽取国家和数量信息geo.add('', attr, value,maptype='world',visual_range=[0, 200], visual_text_color='#fff',symbol_size=15, is_visualmap=True,geo_cities_coords=country_loc_dic)#图参数控制geo.render('scatter.html')#保存图⽚到⽹页,需⼿动⽤浏览器打开。
python⽤folium绘制地图并设置弹窗效果⽬录python–Foliumbasic exampleMarkers标记样式修改标记圆形区域实战python–Folium官⽅说明:map⽤于⽣成地图,主要⽤到黄⾊的参数Map(location=None, width=‘100%', height=‘100%', left=‘0%', top=‘0%', position=‘relative', tiles=‘OpenStreetMap', attr=None, min_zoom=0, max_zoom=18, zoom_start=10, min_lat=- 90, max_lat=90, min_lon=- 180, max_lon=180, max_bounds=False, crs=‘EPSG3857',control_scale=False, prefer_canvas=False, no_touch=False, disable_3d=False, jpg_enabled=False, zoom_control=True, **kwargs) Parameters 参数说明location (tuple or list, default None) – Latitude and Longitude of Map (Northing, Easting).width (pixel int or percentage string (default: ‘100%')) – Width of the map.height (pixel int or percentage string (default: ‘100%')) – Height of the map.tiles (str, default ‘OpenStreetMap') – Map tileset to use. Can choose from a list of built-in tiles, pass a custom URL or pass None to createa map without tiles. For more advanced tile layer options, use the TileLayer class.min_zoom (int, default 0) – Minimum allowed zoom level for the tile layer that is created.max_zoom (int, default 18) – Maximum allowed zoom level for the tile layer that is created.zoom_start (int, default 10) – Initial zoom level for the map.attr (string, default None) – Map tile attribution; only required if passing custom tile URL.crs (str, default ‘EPSG3857') – Defines coordinate reference systems for projecting geographical points into pixel (screen) coordinates and back.定义坐标参考系统control_scale (bool, default False) – Whether to add a control scale on the map.prefer_canvas (bool, default False) – Forces Leaflet to use the Canvas back-end (if available) for vector layers instead of SVG.no_touch (bool, default False) – Forces Leaflet to not use touch events even if it detects them.disable_3d (bool, default False) – Forces Leaflet to not use hardware-accelerated CSS 3D transforms for positioning (which may cause glitches in some rare environments) even if they're supported.zoom_control (bool, default True) – Display zoom controls on the map.basic examplem = folium.Map(location=[45.523, -122.675], width=750, height=500)m = folium.Map(location=[45.523, -122.675], tiles='cartodb positron')m = folium.Map(location=[45.523, -122.675],zoom_start=2,tiles='https:///v4/mapbox.streets/{z}/{x}/{y}.jpg?access_token=mytoken',attr='Mapbox attribution'...)Markersm = folium.Map(location=[45.372, -121.6972], zoom_start=12, tiles="Stamen Terrain")tooltip = "Click me!"folium.Marker([45.3288, -121.6625], popup="<i>Mt. Hood Meadows</i>", tooltip=tooltip).add_to(m)tooltip:点击标记后弹出的信息popup:⿏标放标记上显⽰的信息标记样式修改m = folium.Map(location=[45.372, -121.6972], zoom_start=12, tiles="Stamen Terrain") folium.Marker(location=[45.3288, -121.6625],popup="Mt. Hood Meadows",icon=folium.Icon(icon="cloud"),).add_to(m)folium.Marker(location=[45.3311, -121.7113],popup="Timberline Lodge",icon=folium.Icon(color="green"),).add_to(m)folium.Marker(location=[45.3300, -121.6823],popup="Some Other Location",icon=folium.Icon(color="red", icon="info-sign"),).add_to(m)标记圆形区域点击任意位置出现经纬度tLngPopup()m = folium.Map(location=[46.1991, -122.1889], tiles="Stamen Terrain", zoom_start=13) m.add_child(tLngPopup())打点功能:点击任意位置出现标记,再点击弹出信息m = folium.Map(location=[46.8527, -121.7649], tiles="Stamen Terrain", zoom_start=13) folium.Marker([46.8354, -121.7325], popup="Camp Muir").add_to(m)m.add_child(folium.ClickForMarker(popup="Waypoint"))允许显⽰任何HTML对象m = folium.Map(location=[46.3014, -123.7390], zoom_start=7, tiles="Stamen Terrain")folium.Marker(location=[47.3489, -124.708],popup=folium.Popup(max_width=450).add_child(folium.Vega(vis1, width=450, height=250)),).add_to(m)可以参考的代码实战⽤folium绘制中国的政策地图,城市的政策汇总在⼀个excel表中。
Python给定的经纬度标注在地图上的实现⽅法博主最近发现了python中⼀个好玩的包叫basemap,使⽤这个包可以绘制地图。
值得说⼀下的是,basemap还没有pip检索,因此不能直接使⽤pip install basemap,来安装这个包。
所以需要⾃⼰把下⾯两个包⾃⾏下载,然后在该⽬录下使⽤pip安装。
pyproj-1.9.5.1-cp36-cp36m-win_amd64.whlbasemap-1.1.0-cp36-cp36m-win_amd64.whl先上个效果图,可以发现这个⼯具包还是很强⼤的,下⾯介绍下怎么在地图上标注出经纬度的地点。
整个画图流程分为两部分,第⼀部分是绘制⼀个世界地图,代码如下:from mpl_toolkits.basemap import Basemapm = Basemap() # 实例化⼀个mapm.drawcoastlines() # 画海岸线m.drawmapboundary(fill_color='white')m.fillcontinents(color='white',lake_color='white') # 画⼤洲,颜⾊填充为⽩⾊parallels = np.arange(-90., 90., 10.) # 这两⾏画纬度,范围为[-90,90]间隔为10m.drawparallels(parallels,labels=[False, True, True, False])meridians = np.arange(-180., 180., 20.) # 这两⾏画经度,范围为[-180,180]间隔为10m.drawmeridians(meridians,labels=[True, False, False, True])第⼆部分是标注出经纬度所在的地点,这部分⽐第⼀步简单多了,直接⽤scatter()⽅法就可以了,代码如下:lon, lat = m(lon, lat) # lon, lat为给定的经纬度,可以使单个的,也可以是列表m.scatter(lon, lat, s=100)# 标注出所在的点,s为点的⼤⼩,还可以选择点的性状和颜⾊等属性plt.show()以上这篇Python 给定的经纬度标注在地图上的实现⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
⽤Python画世界地图画世界地图根据名字获得国别码from pygal_maps_world.i18n import COUNTRIES# 定义函数,返回适⽤于pygal的两位国别码def get_country_code(country_name):# pygal两位国别码列表表⽰法:pygal.maps.world.COUNTRIES.items()for code, name in COUNTRIES.items():if name == country_name:return codereturn None主函数import json # 导⼊json模块from pygal_maps_world.maps import World # 导⼊世界地图from pygal.style import RotateStyle, LightColorizedStyle # 设置地图的基⾊from studyofpython.data_down.world_map.country_codes import get_country_code # 导⼊⾃⼰设定的获取国别码的函数cc_population = {} # ⽤来存储从json⽂件中写⼊的字典cc_pops_1 = {} # 分组存储按照⼈⼝cc_pops_2 = {}cc_pops_3 = {}filename = "population_data.json"with open(filename)as f:datas = json.load(f)for data in datas:if data['Year'] == '2010':country_name = data['Country Name']population = int(float(data['Value']))code = get_country_code(country_name)if code:cc_population[code] = populationelse:print('ERROR-' + country_name)for cc, pop in cc_population.items():if pop < 10000000:cc_pops_1[cc] = popelif pop in range(10000000, 1000000000):cc_pops_2[cc] = popelse:cc_pops_3[cc] = popprint(len(cc_pops_1), len(cc_pops_2), len(cc_pops_3))wm_style = RotateStyle('#336699', base_style=LightColorizedStyle) # 定义风格wm = World(style=wm_style) # 创建地图wm.title = 'World Population in 2010,by Country'wm.add('0-10m', cc_pops_1) # 第⼀个是标签,第⼆个是是⼀个包含国别码:⼈⼝数量的字典wm.add('10m-1bn', cc_pops_2)wm.add('>10bn', cc_pops_3)wm.render_to_file('world_population.svg') # 存储图像。
Python+folium绘制精美地图的⽰例详解⽬录1.准备⼯作2.关于folium.Map()3.内建地图底图样式4.多种第三⽅地图底图样式4.1.⾼德地图4.2.智图GeoQ4.3.腾讯地图4.4.天地图5.补充1. 准备⼯作有朋友可能没⽤过folium,它其实就是python的⼀个专业绘制地图的第三⽅库,所以在使⽤之前需要先安装它。
pip install folium在安装完成之后,我们可以在jupyterlab进⾏演⽰如下:import foliumm = folium.Map()m默认对于上⾯的输出,其实是⼀个可交互的地图,⽀持放⼤缩写拖拽等等。
如果你想将输出存在本地,可以这样来:m.save('map.html')可以看到本地就存了这个⼀个⽂件,浏览器打开就可以进⾏交互式操作了。
map⽂件以上就是⼀个平平淡淡的过程......2. 关于folium.Map()在上⼀部分我们可以看到这个map玩意直接就是⼀个地图啦,这⾥我们就介绍⼀下它常⽤的⼏个参数。
folium.Map(location=None,width='100%',height='100%',left='0%',top='0%',position='relative',tiles='OpenStreetMap',attr=None,min_zoom=0,max_zoom=18,zoom_start=10,min_lat=-90,max_lat=90,min_lon=-180,max_lon=180,max_bounds=False,crs='EPSG3857',control_scale=False,prefer_canvas=False,no_touch=False,disable_3d=False,png_enabled=False,zoom_control=True,**kwargs,)参数可真多啊!!没有参数的folium.Map()将得到⼀张世界地图。
pythonbasemap逐步绘制世界地图详解0、importimport matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemap1、带海岸线的⿊⽩世界地图fig = plt.figure(figsize=(12, 8),facecolor='cornsilk')m = Basemap() # 初始化 mapm.drawcoastlines() # 绘制海岸线# 显⽰地图plt.show()地图:2、带海岸线、国界线的⿊⽩世界地图fig = plt.figure(figsize=(12, 8),facecolor='cornsilk')m = Basemap() # 初始化 mapm.drawcoastlines() # 绘制海岸线m.drawcountries() # 绘制国界线# 显⽰地图plt.show()地图:3、给陆地和胡泊填充颜⾊fig = plt.figure(figsize=(12, 8),facecolor='cornsilk')# 绘制地图m = Basemap() # 初始化 mapm.drawcoastlines() # 绘制海岸线m.drawcountries() # 绘制国界线# 填充陆地、胡泊颜⾊m.fillcontinents(color='darkolivegreen', # 陆地颜⾊ lake_color='aqua', # 湖泊颜⾊)# 显⽰地图plt.show()地图:4、给海洋填充颜⾊fig = plt.figure(figsize=(12, 8),facecolor='cornsilk')# 绘制地图m = Basemap() # 初始化 mapm.drawcoastlines() # 绘制海岸线m.drawcountries() # 绘制国界线# 填充陆地、胡泊、海洋的颜⾊m.fillcontinents(color='darkolivegreen', # 陆地颜⾊ lake_color='aqua'# 湖泊颜⾊ )m.drawmapboundary(fill_color='aqua') # 填充海洋# 显⽰地图plt.show()地图:5、添加经纬线fig = plt.figure(figsize=(12, 8),facecolor='cornsilk')# 绘制地图m = Basemap() # 初始化 mapm.drawcoastlines() # 绘制海岸线m.drawcountries() # 绘制国界线# 填充陆地、胡泊、海洋的颜⾊m.fillcontinents(color='darkolivegreen', # 陆地颜⾊ lake_color='aqua', # 湖泊颜⾊# alpha=0.4)m.drawmapboundary(fill_color='aqua') # 填充海洋# 添加经纬线m.drawmeridians(np.arange(0, 360, 30),color='grey', # 颜⾊linewidth=0.6, # 线宽)m.drawparallels(np.arange(-90, 90, 30),color='grey', # 颜⾊ linewidth=0.6, # 线宽 )# 显⽰地图plt.show()地图:。
给图表区域着色使用fill_between方法(x轴数值,其他y轴数值,facecolor颜色,alpha着色透明度)plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)错误检查使用try-excpt进行对出现错误进行什么如文件中有个位置没有数值:try:current_date = datetime.strptime(row[0], "%Y-%m-%d")high = int(row[1])low = int(row[3])except ValueError:print(current_date, 'missing data')else:dates.append(current_date)highs.append(high)lows.append(low)制作世界人口地图:JSON 格式world_population.py导入json导入json的文件设置个变量名为fliename导入country_codes模块中的get_coutry_code函数打开这个文件重名为f将文件数据转化为列表传递给变量popfor循环pop到pop_dict:如果pop_dict中的键Year的值为2010:执行pop_dict的Country Name键的值传递给变量country_name整数类型(浮点数类型(pop_dict中的Value键的值传递给变量poplation))给函数get_coutry_code赋值实参coutry_name传递给变量code输出country_name + poplation获取两个字母的国别码country_codes.py导入from pygal_maps_world.i18n 中的COUNTRIES创建函数get_country_code()添加形参country_name:for 循环COUNTRIES字典:如果字典中的值== 形参的值:返回字典的键返回None添加三个实参并输出出来(get_country_code('Andorra')),(get_country_code('United Arab Emirates')),(get_country_code('Afghanistan'))world_population.pyimport jsonfrom country_codes import get_country_codefilename = 'population_data.json'with open(filename) as f:pop_data = json.load(f)for pop_dict in pop_data:if pop_dict['Year'] == '2010':country_name = pop_dict['Country Name']population = int(float(pop_dict['Value']))code = get_country_code(country_name)if code:print(country_name + ": " + population)else:print('ERROR - ' + country_name)country_codes.pyfrom pygal_maps_world.i18n import COUNTRIESdef get_country_code(country_name):for code, name in COUNTRIES.items():if name == country_name:return codereturn Noneprint(get_country_code('Andorra'))print(get_country_code('United Arab Emirates'))print(get_country_code('Afghanistan'))制作世界地图导入pygal.maps.worldwm = pygal.maps.world()添加wm标题设置添加国家创建一个以svg形式的文件import pygal.maps.worldwm = pygal.maps.world()wm.title = 'North, Central, and South America'wm.add('North America', ['ca', 'mx', 'us'])wm.add('Central America', ['bz', 'cr', 'gt', 'hn', 'ni', 'pa', 'sv'])wm.add('South America', ['ar', 'bo', 'br', 'cl', 'co', 'ec', 'gf','gy', 'pe', 'py', 'sr', 'uy', 've']) wm.render_to_file('americas.svg')在世界地图上呈现数字数据导入pygal_maps_world.mapswm = pygal_maps_world.maps.World()设置标题wm添加(‘’{‘国家缩写’人口数量,})import pygal_maps_worldwm.pygal_maps_world.maps.World()wm.title = 'abc'wm.add('abc',{'ca'}:341535252,{'us'}:463262234)wm.render_to_file('abc')绘制完整的世界人口地图在world_population.py模块中添加空列表cc_populationscode = get_country_code(country)在进行if判断如果code内不为空:空列表cc_populations[code] = 人口数量wm = pygal_maps_world.maps.World()设定标题添加cc_populationscc_populations = {}code = get_country_code(country)if code:cc_populations[code] = populationwm = pygal_maps_world.maps.World()wm.title = 'x'wm.add('x',cc_populations)wm.render_to_file('x.svg')根据人口数量将国家分组添加三个字典根据国家不同数量进行分类cc_1,cc_2,cc_3 ={},{},{}for cc,pop in cc_populations:if判断如果人口数超过1亿:cc_1[cc] = popelif判断如果人口数超过10亿:cc_2[cc] = popelse:cc_3[cc] = pop添加三个子典wm.add('1亿',cc_1)wm.add('10亿',cc_2)wm.add('其他',cc_3)使用Pygal 设置世界地图的样式从pygal.style导入RotateStyke设定颜色wm_style = RotateStyle('#336699')wm = pygal.Worldmap(style=wm_style)加亮颜色主题从pygal.style 导入LightColorizedStyle as LCS在wm_style = RotaeStyle(‘#336699’)添加base_style = LCS。
Python模块---制作新冠疫情世界地图⽬录pyecharts模块简介Echarts 是⼀个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。
⽽ Python 是⼀门富有表达⼒的语⾔,很适合⽤于数据处理。
当数据分析遇上数据可视化时,pyecharts 诞⽣了。
如果想要掌握pyecharts,可以阅读,⾥⾯的图表类型和配置项写的⾮常详细,我就不过多的赘述了安装pyecharts安装的命令也⾮常简单:pip install pyecharts安装成功:测试pyecharts模块我们可以尝试运⾏官⽅⽂档所给出的⼏个⼩例⼦来测试⼀下pyecharts模块是否成功安装打开编辑器,输⼊并运⾏以下代码:from pyecharts.charts import Barfrom pyecharts import options as opts# 内置主题类型可查看 pyecharts.globals.ThemeTypefrom pyecharts.globals import ThemeTypebar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis(["衬衫", "⽺⽑衫", "雪纺衫", "裤⼦", "⾼跟鞋", "袜⼦"]).add_yaxis("商家A", [5, 20, 36, 10, 75, 90]).add_yaxis("商家B", [15, 6, 45, 20, 35, 66]).set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题")))bar.render() #保存为html⽂件若此时在当前⽬录下⽣成了⼀个名为render.html的⽂件打开此⽂件,看到如下的图⽚则证明安装模块成功pyecharts实战:绘制新冠肺炎疫情地图需求分析想要制作全球疫情的地图(空⽓质量图,⼈⼝分布图也是同理),⾸先需要的就是每个国家的疫情数据,⽐如⼈数,治愈数,增长数...... 那么我们该如何获取到这些信息呢?请求数据我们发现很多app和⽹页上都会有最新的疫情信息公布,我选取的数据来源是腾讯地图。
Python地图绘制实操详解在本文里我们给大家介绍了用Python绘制地图的知识点以及详细步骤,需要的朋友们跟着学习下。
网上有很多地图绘制的教程,更多趋向于全国地图或者省级地图,但有时我们需要到县级。
闲得慌,今天以贵州省毕节市为例,分享一篇Python县级地图的绘制(遥想当时差点把百度翻了个底朝天),希望对需要的你能有所帮助,如果没看懂,欢迎留言一起交流学习!模块安装1、模块安装安装所需包——pyecharts。
两种安装方式:1、pip install pyecharts;2、从JetBrains PyCharm中 File——>Settings. ..——>Project——>Project Interpreter 点击右上角的绿色“+”,在搜索框中输入“pyecharts”,点击安装即可(个人习惯用第二种)。
地图文件安装进入pyecharts官网,下载并安装所需地图软件——echarts-china-counties-pypkg3、上代码绘制县级地图/*from pyecharts import Map, Page, Styledef create_charts(): page = Page() style = Style( width=1100, height =600 ) data = [('赫章县', 7.62), ('纳雍县', 11.43), ('黔西县', 14.29), ('织金县', 9.52), ('大方县', 15.24), ('金沙县', 18.10), ('七星关区', 0.95), ('威宁彝族回族苗族自治县', 11.43)] chart = Map("毕节地理坐标系", **style.init_style) attr, value = chart.cast(data) chart.add("", attr, value, maptype='毕节', is_visualmap=True, visual_type='color', is_label_show=True, label_formatter='{b}\n{c}', is_area_show=False, # 组件条距离左侧的位置visual_pos='right', # 组件放置方向('vertical', 'horizontal') visual_orient='horizontal', # 组件映射范围 visual_range=[0, 20], visual_text_color='#000') page.add(chart) return pagecreate_charts().render('r ender2.html') #如果想保存到指定路径:create_charts().render('C:\\Users\\SYH\\Desktop\\render2.html')*/4、修改成你自己的县级地图修改代码中的maptype='毕节' 为你需要的地市,并在data中修改对应县名称及数据。
python实现Pyecharts实现动态地图(Map、Geo)⼀些经常画图的开发⼈员⼤概都⽤过echart,不过⼩⽩⽤Python⽐较多,学习了python下的Pyecharts,发现这个包真的很强⼤。
下⾯是⼩⽩对动态地图的实践案例:假如有这样⼀组数据,全国每个城市的酒店数(虚拟),那么如何在地图上展⽰呢?1.Python需要安装Pycharts当安装完成后需要添加地图包:安装pyecharts后还需要根据需要安装城市、省份等地图包,下⾯是对包的整理,⼤家可以根据需要下载。
pip install pyechartspip install echarts-countries-pypkgpip install echarts-china-provinces-pypkgpip install echarts-china-cities-pypkgpip install echarts-countries-pypkgpip install echarts-china-provinces-pypkgpip install echarts-china-cities-pypkgpip install echarts-china-counties-pypkgpip install echarts-china-misc-pypkg2.安装完成后,画图from pyecharts import Barfrom pyecharts import Map, Geoimport pandas as pd#读取数据inpath = 'D:/Users/traindatas/map_2.csv' #数据路径data = pd.read_csv(inpath , header = 'infer') #读取数据#浏览数据data.head()数据展⽰如下:这⾥是展⽰2019年1到九⽉每个⽉,城市酒店数的变化情况,每个⽉⽤1号代表当⽉由于每个城市包含9条数据,因此,就需要⽤循环做出9张MAP地图,来展⽰每个⽉每个城市的情况#取出⽇期IsDuplicated = data['effectdate']list_of_month = list(IsDuplicated.drop_duplicates())#循环,做出每个⽉的分布图for month in list_of_month:# 城市酒店数df = data[data['effectdate'] == month]indexs = list(df['cityname'])values = list(df['masterhotelid'])geo = Geo("全国酒店分布", str(month) + "全国酒店分布", title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59')# type="effectScatter", is_random=True, effect_scale=5 使点具有发散性geo.add("全国酒店分布", indexs, values, type="effectScatter", is_random=True, effect_scale=5, visual_range=[0, 900],visual_text_color="#fff", symbol_size=15, is_visualmap=True, is_roam=False) #geo.show_config()filepath = 'D:/Users/pythonfeature/map/' +str(month) + '_month.html'geo.render(path=filepath)这样就在指定的⽂件夹下⽣成了9张图,我们随意打开⼀张图:在本地图⽚中,图中的点是动态的,但是⼩⽩不知道html类型的图⽚如何上传,所以就上传了⼀个下载的PNG图⽚,⼤家可以⾃⾏尝试之后观看动图下图就是上⾯代码⽣成的9张图,⽂件类型是HTML类型打开其中⼀张图看下~当然Pyecharts中的图形还是很丰富的,之后⼩⽩再分享⼀些其他的图形以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
绘制世界地图+饼图的代码图片可以分为两个部分第一是背景世界地图第二是相应地点对应的饼图本例子使用的输入数据文件名为:plot.dataLong和lat代表的饼图圆心的定位,可以理解为经纬度简单平移换算后的结果Region 理解为序号、分组就行G,123就是饼图里扇形的数据了,可以多加几个G4、G5...Total,可不要R,圆的半径,这里是用total取log换算的,total越大圆越大使用的R包library(ggplot2)library(scatterpie)library(ggthemes)难点在于地点的经纬度怎么找,下文直接提供,可按需查询,可以先用查到的数据画一遍,不出意外的话,会画歪掉,之后再手动调整一下,再画一遍就好,实在调不准的AI里面手动去,反正美化嘛也是要微调的。
地点数据(例子),原始经纬度可以在R包中找到,也可以自己估计country type long lat印度India 78.51400315 23.39336982印度尼西亚Indonesia 119.475746 -2.996080521中国China 106.8475748 35.08243544 菲律宾Philippines 122.6806714 11.45729614 泰国Thailand 100.7094822 13.24865418老挝人民民主共和国Lao People's DemocraticRepublic103.7959383 18.43688928孟加拉国Bangladesh 90.50611804 23.50905166 缅甸Myanmar 96.92299878 18.80447879 马来西亚Malaysia 110.8603312 3.9691909 柬埔寨Cambodia 105.1177878 12.59715426马达加斯加Madagascar 46.98903203 -17.73397593斯里兰卡Sri Lanka 80.51236302 8.469555616 日本Japan 131.0537277 33.38443942 越南Viet Nam 106.1114085 16.52511357 大韩民国Korea, Republic of 127.3394136 35.73691086美利坚合众国United States of America -96.4019470238.12504959R代码library(ggplot2)library(scatterpie)library(ggthemes)world <- map_data('world')d<-read.table("plot.data",head=T,sep="\t")p <- ggplot(world, aes(long, lat)) +geom_polygon(data = world, aes(long, lat, group = group, fill = NA),color = "grey70",fill = "#F5F5DC", linewidth = 0.25)+coord_cartesian(xlim = c(50,280),ylim = c(-25,50))+labs(x="Longitude", y="Latitude")+theme_tufte()+theme(axis.ticks = element_line(linetype = "blank"),axis.text = element_text(colour = NA),panel.background = element_rect(fill = '#F0FFFF'))fig<-p+geom_scatterpie(aes(x=long, y=lat, group=region, r=r),data=d, cols=c("Hap.1","Hap.2","Hap.3"), color=NA, alpha=.8)ggsave(fig,file="map.plot.pdf", width=15, height=6.5)。
给图表区域着色
使用fill_between方法(x轴数值,其他y轴数值,facecolor颜色,alpha着色透明度)plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
错误检查
使用try-excpt进行对出现错误进行什么
如文件中有个位置没有数值:
try:
current_date = datetime.strptime(row[0], "%Y-%m-%d")
high = int(row[1])
low = int(row[3])
except ValueError:
print(current_date, 'missing data')
else:
dates.append(current_date)
highs.append(high)
lows.append(low)
制作世界人口地图:JSON 格式
world_population.py
导入json
导入json的文件设置个变量名为fliename
导入country_codes模块中的get_coutry_code函数
打开这个文件重名为f
将文件数据转化为列表传递给变量pop
for循环pop到pop_dict:
如果pop_dict中的键Year的值为2010:
执行pop_dict的Country Name键的值传递给变量country_name
整数类型(浮点数类型(pop_dict中的Value键的值传递给变量poplation))
给函数get_coutry_code赋值实参coutry_name传递给变量code
输出country_name + poplation
获取两个字母的国别码
country_codes.py
导入from pygal_maps_world.i18n 中的COUNTRIES
创建函数get_country_code()添加形参country_name:
for 循环COUNTRIES字典:
如果字典中的值== 形参的值:
返回字典的键
返回None
添加三个实参并输出出来(get_country_code('Andorra')),(get_country_code('United Arab Emirates')),(get_country_code('Afghanistan'))
world_population.py
import json
from country_codes import get_country_code
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if code:
print(country_name + ": " + population)
else:
print('ERROR - ' + country_name)
country_codes.py
from pygal_maps_world.i18n import COUNTRIES
def get_country_code(country_name):
for code, name in COUNTRIES.items():
if name == country_name:
return code
return None
print(get_country_code('Andorra'))
print(get_country_code('United Arab Emirates'))
print(get_country_code('Afghanistan'))
制作世界地图
导入pygal.maps.world
wm = pygal.maps.world()
添加wm标题
设置添加国家
创建一个以svg形式的文件
import pygal.maps.world
wm = pygal.maps.world()
wm.title = 'North, Central, and South America'
wm.add('North America', ['ca', 'mx', 'us'])
wm.add('Central America', ['bz', 'cr', 'gt', 'hn', 'ni', 'pa', 'sv'])
wm.add('South America', ['ar', 'bo', 'br', 'cl', 'co', 'ec', 'gf','gy', 'pe', 'py', 'sr', 'uy', 've']) wm.render_to_file('americas.svg')
在世界地图上呈现数字数据
导入pygal_maps_world.maps
wm = pygal_maps_world.maps.World()
设置标题
wm添加(‘’{‘国家缩写’人口数量,})
import pygal_maps_world
wm.pygal_maps_world.maps.World()
wm.title = 'abc'
wm.add('abc',{'ca'}:341535252,{'us'}:463262234)
wm.render_to_file('abc')
绘制完整的世界人口地图
在world_population.py模块中添加空列表cc_populations
code = get_country_code(country)
在进行if判断如果code内不为空:
空列表cc_populations[code] = 人口数量
wm = pygal_maps_world.maps.World()
设定标题
添加cc_populations
cc_populations = {}
code = get_country_code(country)
if code:
cc_populations[code] = population
wm = pygal_maps_world.maps.World()
wm.title = 'x'
wm.add('x',cc_populations)
wm.render_to_file('x.svg')
根据人口数量将国家分组
添加三个字典根据国家不同数量进行分类
cc_1,cc_2,cc_3 ={},{},{}
for cc,pop in cc_populations:
if判断如果人口数超过1亿:
cc_1[cc] = pop
elif判断如果人口数超过10亿:
cc_2[cc] = pop
else:
cc_3[cc] = pop
添加三个子典
wm.add('1亿',cc_1)
wm.add('10亿',cc_2)
wm.add('其他',cc_3)
使用Pygal 设置世界地图的样式
从pygal.style导入RotateStyke
设定颜色wm_style = RotateStyle('#336699')
wm = pygal.Worldmap(style=wm_style)
加亮颜色主题
从pygal.style 导入LightColorizedStyle as LCS
在wm_style = RotaeStyle(‘#336699’)添加base_style = LCS。