Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖

這篇文章主要講解了“Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖”吧!

秀嶼網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,秀嶼網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為秀嶼上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的秀嶼做網(wǎng)站的公司定做!

前言

今天的推文教程使用geopandas進(jìn)行空間圖表的繪制(geopandas空間繪圖很方便,省去了很多的數(shù)據(jù)處理過程,而且也完美銜接matplotlib,學(xué)習(xí)python 空間繪圖的小伙伴可以看下啊),具體為空間氣泡圖的繪制,主要涉及的內(nèi)容如下:

  • geopandas geojson數(shù)據(jù)格式讀取并可視化展示

  • 單獨(dú)添加散點(diǎn)大小圖例圖層

  • adjustText 庫(kù)解決文本重疊問題

geopandas geojson數(shù)據(jù)操作

這里我們選擇的為香港地圖的geojson 文件數(shù)據(jù),此類文件可在DAtAV 地圖選擇器進(jìn)行下載。下載所得的文件名為香港.json,可視化效果如下:

Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖

數(shù)據(jù)讀取

使用geopandas 的read_file()方法就可很方便地進(jìn)行數(shù)據(jù)讀取,代碼如下:

hk_file = r"F:\DataCharm\商業(yè)藝術(shù)圖表仿制\香港地圖可視化\香港特別行政區(qū).json"
hk = geopandas.read_file(hk_file)

更多geopandas 讀取數(shù)據(jù)方法,可以參看geopandas官網(wǎng)進(jìn)行學(xué)習(xí)了解。

數(shù)據(jù)可視化展示

在讀取完數(shù)據(jù)之后,我們可以直接使用geopandas的plot() 方法進(jìn)行繪制,代碼如下(做了簡(jiǎn)單的顏色設(shè)置):

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,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 8)

ax.axis('off') # 移除坐標(biāo)軸
plt.savefig('hk_charts_pir.png',width=8,height=8,
            dpi=900,bbox_inches='tight',facecolor='white')

結(jié)果如下:

  • 區(qū)名文本添加:在讀取的數(shù)據(jù)結(jié)果中有name 列為對(duì)應(yīng)的區(qū)名,使用hk.geometry.representative_point() 方法計(jì)算出其代表性 點(diǎn)的經(jīng)緯度信息用于繪制文本位置,結(jié)果如下:

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

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

結(jié)果如下:

Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖

添加氣泡散點(diǎn)數(shù)據(jù)

由于數(shù)據(jù)的經(jīng)緯度是直接基于高德地圖進(jìn)行解析的,導(dǎo)致存在部分?jǐn)?shù)據(jù)經(jīng)緯度信息出錯(cuò),我們使用pandas進(jìn)行簡(jiǎn)單的數(shù)據(jù)篩選,具體就不再展示,后面會(huì)推出系列教程推文,數(shù)據(jù)預(yù)覽如下:

這里主要使用紅色框中的數(shù)據(jù)進(jìn)行繪制,即使用scatter()方法加合理設(shè)置散點(diǎn)大小即可,代碼如下:

for x,y,price in zip(scatter_se.lon,scatter_se.lat,scatter_se['實(shí)用單價(jià)']):
    hk_map.scatter(x,y,s=price/500,color='#FFEB3B',alpha=.5,ec='k',lw=.1)

經(jīng)過一些定制化設(shè)置效果如下:

Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖

氣泡圖例添加

這里我們不是直接基于數(shù)據(jù)進(jìn)行圖例的生成,而是單獨(dú)進(jìn)行其他圖層的繪制進(jìn)行圖例生成,這樣做的好處就是可以更加自由定制所需圖例的顏色和大小,涉及的代碼如下:

#這里進(jìn)行單獨(dú)的圖例添加
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)
#圖例定制化設(shè)置
legend = ax.legend(frameon=False,ncol=4,loc='lower right',title='實(shí)用單價(jià)',bbox_to_anchor=(1, -.06),
                  fontsize=9)
legend.get_title().set_color('#ffffff')
for text in legend.get_texts():
    text.set_color("#ffffff")

注意下代碼的后半部分,這是對(duì)matplotlib 圖例設(shè)置的定制化設(shè)定,也適用于其他圖例。繪圖完整代碼如下:

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)

#使用默認(rèn)的text添加文本導(dǎo)致文本重疊
for loc, label in zip(hk.geometry.representative_point(),hk.name):
    ax.text(loc.x,loc.y,label,size=11,color="#0DCFE3")
for x,y,price in zip(scatter_se.lon,scatter_se.lat,scatter_se['實(shí)用單價(jià)']):
    hk_map.scatter(x,y,s=price/500,color='#FFEB3B',alpha=.5,ec='k',lw=.1)

ax.axis('off') # 移除坐標(biāo)軸

#這里進(jìn)行單獨(dú)的圖例添加
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)
#圖例定制化設(shè)置
legend = ax.legend(frameon=False,ncol=4,loc='lower right',title='實(shí)用單價(jià)',bbox_to_anchor=(1, -.06),
                  fontsize=9)
legend.get_title().set_color('#ffffff')
for text in legend.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,'數(shù)據(jù)來源:菜J學(xué)Python',transform = ax.transAxes,
        ha='center', va='center',fontsize = 10,color='white')
ax.text(.91,-.07,'\nVisualization by DataCharm',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 庫(kù)解決文本重疊問題

大家可能發(fā)現(xiàn):結(jié)果圖中文本較集中,可能對(duì)閱讀造成不便,我們這里只用adjustText 包進(jìn)行解決,這里給出文本添加的代碼,其他步驟一樣:

from adjustText import adjust_text
# 使用adjustText修正文字重疊現(xiàn)象
new_texts = [ax.text(loc.x,loc.y,label,size=13,color="#0DCFE3") for loc, label in \
             zip(hk.geometry.representative_point(),hk.name)]
adjust_text(new_texts, 
            only_move={'text': 'xy'},)

可視化結(jié)果如下:

Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖

感謝各位的閱讀,以上就是“Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

文章標(biāo)題:Python怎么實(shí)現(xiàn)香港地圖、房?jī)r(jià)可視化和繪制氣泡圖
標(biāo)題URL:http://bm7419.com/article10/igscdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、定制開發(fā)云服務(wù)器、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作