2017-07-25 79 views
0

我試圖使用Basemap函數創建一個如here所示的圖形,但使用this數據。使用底圖繪製Python中的納稅行程

這是我的代碼:

west, south, east, north = -74.26, 40.50, -73.70, 40.92 

fig = plt.figure(figsize=(14,10)) 

m = Basemap(projection='merc', llcrnrlat=south, urcrnrlat=north, 
      llcrnrlon=west, urcrnrlon=east, lat_ts=south, resolution='c') 
x, y = m(df['pickup_longitude'].values, df['pickup_latitude'].values) 
m.hexbin(x, y, gridsize=1900, cmap=cm.YlOrRd_r) 

然而,我的成績也不過是怪異。

enter image description here

我不知道我錯過了什麼。

謝謝。

回答

1

看起來數據包含的數據要比底圖繪圖中的範圍更多。
您將通過使用更多的網格點(例如, gridsize=10000。然而,這會花費大量的內存。

更好的選擇可能是首先從數據框中選擇要顯示在地圖中的範圍內的那些值。

import pandas as pd 
import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap 
from matplotlib import cm 

df = pd.read_csv("train.csv") 
west, south, east, north = -74.26, 40.50, -73.70, 40.92 
df = df[(df['pickup_longitude'] > west) & (df['pickup_longitude'] < east)] 
df = df[(df['pickup_latitude'] > south) & (df['pickup_latitude'] < north)] 

fig = plt.figure(figsize=(14,8)) 

m = Basemap(projection='merc', llcrnrlat=south, urcrnrlat=north, 
      llcrnrlon=west, urcrnrlon=east, lat_ts=south, resolution='c') 
x, y = m(df['pickup_longitude'].values, df['pickup_latitude'].values) 
m.hexbin(x, y, gridsize=100, bins='log', cmap=cm.YlOrRd_r, lw=0.4) 

plt.show() 

enter image description here

使用更多的格點則允許甚至更高的分辨率。例如。 gridsize=1000

enter image description here