如何利用GeoPandas绘制专题图
小编给大家分享一下如何利用GeoPandas绘制专题图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
十载的磴口网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整磴口建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“磴口网站设计”,“磴口网站推广”以来,每个客户项目都认真落实执行。
练习使用geopandas绘制专题图,仅供参考。
import pandas as pd import geopandas as gp import contextily as ctx import matplotlib.pyplot as plt from shapely.geometry import Point import matplotlib.patches as mpatches from matplotlib_scalebar.scalebar import ScaleBar chi=gp.read_file("population_data/chi_shp/省.shp").to_crs(epsg=3415) nine_lines = gp.read_file('population_data/chi_shp/chi_nine_dotted_line.shp',encoding='utf-8') tai=gp.read_file("population_data/chi_shp/省.shp") tai=tai[tai['省'].isin(['台**'])].to_crs(epsg=3415) fig=plt.figure(figsize=(8,8)) #设置画布大小 ax = plt.gca() ax.set_title(chi.columns.values[1],fontsize=14,loc="left") # 主图绘制 chi.plot(ax=ax,color='#E24A33',column="需要绘制的数据列名称",edgecolor='grey',linewidth=0.5, legend=True, legend_kwds={ 'labels':['a','v'], 'loc': 'lower left', 'title': 'Title', 'shadow': False, 'fontsize':8, 'frameon':False, 'prop':{'family': 'Times New Roman', 'weight': 'normal', 'size': 12}}) # 添加九** nine_lines.geometry.to_crs(epsg=3415).plot(ax=ax, edgecolor='black', linewidth=2, alpha=0.5) # 添加台** tai.to_crs(epsg=3415).plot(ax=ax,hatch= "////",label= "缺失值",facecolor='lightgrey') # 设置绘图显示范围 ax.set(ylim=(-0.3*10**6,4.5*10**6)) # 自定义图例文字 # get all the legend labels # legend_labels = ax.get_legend().get_texts() # bounds=['q','a'] # # replace the legend labels # for bound, legend_label in zip(bounds, legend_labels): # legend_label.set_text(bound) # leg = ax.get_legend() # leg.set_title('Percentage Error (%)',prop={'family': 'Times New Roman', 'weight': 'normal', #'size': 12}) # 副图框绘制 ax_child = fig.add_axes([0.75, 0.20, 0.15, 0.15]) # left, bottom, width, height chi.plot(ax=ax_child,color='#E24A33',edgecolor='grey',linewidth=0.5) chi.plot(ax=ax_child,color='#348ABD',edgecolor='grey',linewidth=0.5) ax_child = nine_lines.geometry.to_crs(epsg=3415).plot(ax=ax_child, edgecolor='black', linewidth=2, alpha=0.5) tai.to_crs(epsg=3415).plot(ax=ax_child,hatch= "////",label= "缺失值",facecolor='lightgrey') ax_child.set(xlim=(-0.5*10**6,1.5*10**6),ylim=(-1.5*10**6,0.8*10**6)) ax_child.set_xticks([]) ax_child.set_yticks([]) # 添加省市名称注记 # texts=chi.apply(lambda x: ax.annotate(s=x['省'], xy=x.geometry.centroid.coords[0], va='center' # ,fontsize=10,arrowprops=dict(arrow, color='k', lw=0.5)), axis=1) # adjust_text(texts) # 额外图例绘制 p1=gp.GeoDataFrame({'geometry':[Point(-1.60*10**6,-0.1*10**6)]}) p1.plot(ax=ax,markersize=100,facecolor='lightgrey',hatch= "////") ax.text(-1.54*10**6,-0.15*10**6, "NoData",{'family': 'Times New Roman', 'weight': 'normal', 'size': 12}) # 图例操作 LegendElement = [ mpatches.Patch(facecolor='#E24A33', linestyle='--', linewidth=1.2, label='1'), mpatches.Patch(facecolor='#348ABD', linestyle='--', linewidth=1.2, label='2') ] ax.legend(handles = LegendElement, loc='lower left',prop={'family': 'Times New Roman', 'weight': 'normal', 'size': 12},frameon=False,shadow=False) # 添加比例尺 scalebar = ScaleBar(dx=1*10**-3,units='km',length_fraction=0.1, font_properties={'family': 'Times New Roman', 'weight': 'normal', 'size': 12}, location=8,sep=1,frameon=False) ax.add_artist(scalebar) # 添加指北针 x, y, arrow_length = 0.42, 0.09, 0.07 ax.annotate('N', xy=(x, y), xytext=(x, y-arrow_length), arrowprops=dict(facecolor='black', width=4, headwidth=7), ha='center', va='center', fontsize=10, xycoords=ax.transAxes) # 添加底图 # ctx.add_basemap(ax,crs="epsg:3415",source=ctx.providers.OpenStreetMap.Mapnik(apiKey="*")) # ctx.add_basemap(ax_child,crs="epsg:3415",source=ctx.providers.OpenStreetMap.CH(apiKey="*")) # 设置刻度 # ax.set_axis_off() # ax_child.set_axis_off() ax.set_xticks([]) ax.set_yticks([]) # 保存地图 # plt.savefig("filename",dpi=600,bbox_inches='tight')
输出图大致如下所示:
以上是“如何利用GeoPandas绘制专题图”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
本文标题:如何利用GeoPandas绘制专题图
浏览路径:http://hbruida.cn/article/psiihi.html