2017-08-29 29 views
0

自分の学習目的のために住宅データセットを使用しています。地図の上にプロットを重ねることで、 'ホットスポット'。地図上のオーバーレイ散布図(img)

私のコードは以下の通りです:

housing = pd.read_csv('https://raw.githubusercontent.com/ageron/handson-ml/master/datasets/housing/housing.csv') 

plt.figure() 
housing.plot(x='longitude', y='latitude', kind='scatter', alpha=0.4, 
      s= housing['population']/100, label='population', figsize=(10,7), 
      c= 'median_house_value', cmap=plt.get_cmap('jet'), colorbar=True, zorder=5) 
plt.legend() 
plt.show() 

私はこれは私が試したものです'California.png'

として保存された画像:

img=imread('California.png') 

plt.figure() 
plt.imshow(img,zorder=0) 
housing.plot(x='longitude', y='latitude', kind='scatter', alpha=0.4, 
      s= housing['population']/100, label='population', figsize=(10,7), 
      c= 'median_house_value', cmap=plt.get_cmap('jet'), colorbar=True, zorder=5) 
plt.legend() 
plt.show() 

しかし、これはちょうど私の二つのグラフを提供します。私は無駄にインデックスを回してみました。

これを行う簡単な方法はありますか?ありがとう。

EDIT:@nbeuchatで以下のコードを使用する:

plt.figure(figsize=(10,7)) 
img=imread('California.png') 

plt.imshow(img,zorder=0) 
ax = plt.gca() 
housing.plot(x='longitude', y='latitude', kind='scatter', alpha=0.4, 
     s= housing['population']/100, label='population', ax=ax, 
     c= 'median_house_value', cmap=plt.get_cmap('jet'), colorbar=True, 
     zorder=5) 
plt.legend() 
plt.show() 

私は、次のプロットを得る:

enter image description here

答えて

1

あなたはデータフレームのプロット機能を使って、新しいフィギュアを作成しています。 2番目のプロットを描きたい軸を渡す必要があります。 1つの方法は、gcaを使用して現在の軸を取得することです。

以下の(ただしテストされていない)動作するはず:

plt.figure(figsize=(10,7)) 
img=imread('California.png') 

plt.imshow(img,zorder=0,extent=[housing['longitude'].min(),housing['longitude'].max(),housing['latitude'].min(),housing['latitude'].max()]) 
ax = plt.gca() 
housing.plot(x='longitude', y='latitude', kind='scatter', alpha=0.4, 
     s= housing['population']/100, label='population', ax=ax, 
     c= 'median_house_value', cmap=plt.get_cmap('jet'), colorbar=True, 
     zorder=5) 
plt.legend() 
plt.show() 

EDIT:最小とimshowextentパラメータを使用して、緯度と経度のデータの最大値が正しく画像をスケーリングします。

+0

プロットは奇妙に見え、散布図は小さく、角にあります。 – JohnWayne360

+0

imshowは1pxが緯度/経度で何を意味するのかを知りません。明示的に設定する必要があります。 'imshow'の' extent'パラメータを使うことができます。私は数週間前にそれをしました。私のノートを確認させてください。 – nbeuchat

+0

これを行うと、あなたのプロットに正しいxとyのティックラベルが付いているという利点があります。 – nbeuchat