失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python数据可视化:香港地图 房价可视化 绘制气泡图

Python数据可视化:香港地图 房价可视化 绘制气泡图

时间:2019-04-07 10:52:59

相关推荐

Python数据可视化:香港地图 房价可视化 绘制气泡图

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章来源于DataCharm ,作者宁海涛

前言

今天的推文教程使用geopandas进行空间图表的绘制(geopandas空间绘图很方便,省去了很多的数据处理过程,而且也完美衔接matplotlib,学习python 空间绘图的小伙伴可以看下啊),具体为空间气泡图的绘制,主要涉及的内容如下:

geopandas geojson数据格式读取并可视化展示单独添加散点大小图例图层adjustText 库解决文本重叠问题

geopandas geojson数据操作

这里我们选择的为香港地图的geojson 文件数据,此类文件可在DAtAV 地图选择器进行下载。下载所得的文件名为香港.json,可视化效果如下:

数据读取

使用geopandas 的read_file()方法就可很方便地进行数据读取,代码如下:

hk_file=r"F:\DataCharm\商业艺术图表仿制\香港地图可视化\香港特别行政区.json"hk=geopandas.read_file(hk_file)

更多geopandas 读取数据方法,可以参看geopandas官网进行学习了解。

数据可视化展示

在读取完数据之后,我们可以直接使用geopandas的plot()方法进行绘制,代码如下(做了简单的颜色设置):

fig,ax=plt.subplots(figsize=(10,8),dpi=200)hk_map=hk.geometry.plot(ax=ax,fc="#CCEBEB",ec="#009999",lw=1)ax.text(.91,0.05,'\nVisualizationbyDataCharm',transform=ax.transAxes,ha='center',va='center',fontsize=8)ax.axis('off')#移除坐标轴plt.savefig('hk_charts_pir.png',width=8,height=8,dpi=900,bbox_inches='tight',facecolor='white')

结果如下:

区名文本添加:在读取的数据结果中有name列为对应的区名,使用hk.geometry.representative_point()方法计算出其代表性点的经纬度信息用于绘制文本位置,结果如下:

再通过使用ax.text()方法添加文本即可,代码如下:

forloc,labelinzip(hk.geometry.representative_point(),hk.name):ax.text(loc.x,loc.y,label,size=13,color="#0DCFE3")

结果如下:

添加气泡散点数据

由于数据的经纬度是直接基于高德地图进行解析的,导致存在部分数据经纬度信息出错,我们使用pandas进行简单的数据筛选,具体就不再展示,后面会推出系列教程推文,数据预览如下:

这里主要使用红色框中的数据进行绘制,即使用scatter()方法加合理设置散点大小即可,代码如下:

forx,y,priceinzip(scatter_se.lon,scatter_se.lat,scatter_se['实用单价']):hk_map.scatter(x,y,s=price/500,color='#FFEB3B',alpha=.5,ec='k',lw=.1)

经过一些定制化设置效果如下:

气泡图例添加

这里我们不是直接基于数据进行图例的生成,而是单独进行其他图层的绘制进行图例生成,这样做的好处就是可以更加自由定制所需图例的颜色和大小,涉及的代码如下:

#这里进行单独的图例添加ax.scatter([],[],c='#FFEB3B',s=6000/500,label='6000-10000',edgecolor='black',lw=.5)ax.scatter([],[],c='#FFEB3B',s=10000/500,label='10000-30000',edgecolor='black',lw=.5)ax.scatter([],[],c='#FFEB3B',s=30000/500,label='30000-50000',edgecolor='black',lw=.5)ax.scatter([],[],c='#FFEB3B',s=50000/500,label='50000-90000',edgecolor='black',lw=.5)#图例定制化设置legend=ax.legend(frameon=False,ncol=4,loc='lowerright',title='实用单价',bbox_to_anchor=(1,-.06),fontsize=9)legend.get_title().set_color('#ffffff')fortextinlegend.get_texts():text.set_color("#ffffff")

注意下代码的后半部分,这是对matplotlib 图例设置的定制化设定,也适用于其他图例。绘图完整代码如下:

fig,ax=plt.subplots(figsize=(10,8),dpi=200,facecolor='#323332',edgecolor='#323332')ax.set_facecolor('#323332')hk_map=hk.geometry.plot(ax=ax,fc="#292200",ec="gray",lw=1,alpha=.8)#使用默认的text添加文本导致文本重叠forloc,labelinzip(hk.geometry.representative_point(),hk.name):ax.text(loc.x,loc.y,label,size=11,color="#0DCFE3")forx,y,priceinzip(scatter_se.lon,scatter_se.lat,scatter_se['实用单价']):hk_map.scatter(x,y,s=price/500,color='#FFEB3B',alpha=.5,ec='k',lw=.1)ax.axis('off')#移除坐标轴#这里进行单独的图例添加ax.scatter([],[],c='#FFEB3B',s=6000/500,label='6000-10000',edgecolor='black',lw=.5)ax.scatter([],[],c='#FFEB3B',s=10000/500,label='10000-30000',edgecolor='black',lw=.5)ax.scatter([],[],c='#FFEB3B',s=30000/500,label='30000-50000',edgecolor='black',lw=.5)ax.scatter([],[],c='#FFEB3B',s=50000/500,label='50000-90000',edgecolor='black',lw=.5)#图例定制化设置legend=ax.legend(frameon=False,ncol=4,loc='lowerright',title='实用单价',bbox_to_anchor=(1,-.06),fontsize=9)legend.get_title().set_color('#ffffff')fortextinlegend.get_texts():text.set_color("#ffffff")#添加必要的文本:这里title也是采用相同方法ax.text(.5,1.05,"香港在售二手房分布图",transform=ax.transAxes,color="white",weight='bold',size=20,ha='center',va='center')ax.text(.5,.985,'数据来源:菜J学Python',transform=ax.transAxes,ha='center',va='center',fontsize=10,color='white')ax.text(.91,-.07,'\nVisualizationbyDataCharm',transform=ax.transAxes,ha='center',va='center',fontsize=8,color='white')plt.savefig('hk_charts.png',width=8,height=8,dpi=900,bbox_inches='tight',facecolor='#323332')#ax.set_axisbelow(True)plt.show()

可视化效果:

adjustText 库解决文本重叠问题

大家可能发现:结果图中文本较集中,可能对阅读造成不便,我们这里只用adjustText 包进行解决,这里给出文本添加的代码,其他步骤一样:

fromadjustTextimportadjust_text#使用adjustText修正文字重叠现象new_texts=[ax.text(loc.x,loc.y,label,size=13,color="#0DCFE3")forloc,labelin\zip(hk.geometry.representative_point(),hk.name)]adjust_text(new_texts,only_move={'text':'xy'},)

可视化结果如下:

如果觉得《Python数据可视化:香港地图 房价可视化 绘制气泡图》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。