パイソンの描画|スペースマップ上にバブルの描画を分散させる

今日のツイートチュートリアルでは、geopandasを使用して空間チャートを描画します(geopandas空間描画は非常に便利で、多くのデータ処理を節約できます。また、matplotlibに完全に接続されており、python空間描画を学ぶ友人はそれを見ることができます)。バブルチャートの主な内容は次のとおりです。

geopandasgeojsonデータ操作

ここでは、香港の地図のgeojsonファイルデータを選択します。このようなファイルは、DAtAVマップセレクターでダウンロードできます。ダウンロードしたファイルの名前はHongKong Special Administrative Region.jsonで、視覚化効果は次のとおりです。

データの読み取り

geopandasのread_file()メソッドを使用して、データを簡単に読み取ることができます。コードは次のとおりです。

hk_file = r"F:\DataCharm\ビジネスアートグラフィックの模倣\香港の地図の視覚化\香港特別行政区.json"
hk = geopandas.read_file(hk_file)

データを読み取るためのその他のgeopandasの方法については、geopandasの公式Webサイトを参照して学習してください。

[データの視覚化](https://cloud.tencent.com/product/yuntu?from=10680)** display **

データを読み取った後、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,'\nVisualization by DataCharm',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')

結果は次のとおりです。

次に、ax.text()メソッドを使用してテキストを追加します。コードは次のとおりです。

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

結果は次のとおりです。

バブル散乱データを追加

ここのデータソースは私の友人Jの公式アカウントです。CaiJはデータサポートを提供してくれてありがとうPythonを学びます。データの緯度と経度はGaodeマップに基づいて直接解析されるため、データの緯度と経度の情報の一部が間違っています。単純なデータフィルタリングにパンダを使用しているため、詳細は表示されません。一連のチュートリアルツイートは後で開始されます。データプレビューは次のとおりです。

ここでは、主に赤いボックス内のデータを使用して描画します。つまり、scatter()メソッドを使用して、散在するポイントのサイズを適切に設定します。コードは次のとおりです。

for x,y,price inzip(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='lower right',title='実用単価',bbox_to_anchor=(1,-.06),
     fontsize=9)
legend.get_title().set_color('#ffffff')for text in legend.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)

# デフォルトのテキストを使用してテキストを追加すると、テキストがオーバーラップします
for loc, label inzip(hk.geometry.representative_point(),hk.name):
 ax.text(loc.x,loc.y,label,size=11,color="#0DCFE3")for x,y,price inzip(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='lower right',title='実用単価',bbox_to_anchor=(1,-.06),
     fontsize=9)
legend.get_title().set_color('#ffffff')for text in legend.get_texts():
 text.set_color("#ffffff")
# 必要なテキストを追加します。同じ方法がここのタイトルに使用されます
ax.text(.5,1.05,"香港で販売されている中古住宅の分布図",transform = ax.transAxes,color="white",weight='bold',size=20,
  ha='center', va='center')
ax.text(.5,.985,'データソース:CaiJは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ライブラリは、テキストの重複の問題を解決します

結果グラフのテキストがより集中しているため、読みに不便を感じる場合があります。この問題を解決するために、adjustTextパッケージのみを使用します。テキストを追加するためのコードは次のとおりです。他の手順は同じです。

from adjustText import adjust_text
# AdjustTextを使用してテキストの重複を修正します
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'},)

視覚化の結果は次のとおりです。

総括する ##

このツイートでは、空間描画にジオパンダを使用する方法を紹介しています。完全なコードは多くありませんが、関連する知識ポイントはたくさんあります。習得していただければ幸いです。また、価格データはクローラーに基づいていますが、「データ取得-データ処理分析-データ視覚化」などの完全なプロジェクトプロセスについてどう思いますか?聴衆が多い場合は、後でターゲットを絞ったツイートを作成します。読者のディスカッションエリアで話し合ったり、メッセージを残したりできます。

Recommended Posts

パイソンの描画|スペースマップ上にバブルの描画を分散させる
Pythonに基づいて個人のフットプリントマップを描く
Python描画の一般設定
Pythonの基本的な描画チュートリアル(1)
Ubuntu14.04にPython3をインストールします
Ubuntu16.04にPython3をインストールします
UbuntuにPython3.7をインストールする
python Tic-Tac-Toe-テキストバージョン(オン)