使用底图绘制Python中的税务旅行

时间:2017-07-25 19:11:07

标签: python matplotlib heatmap matplotlib-basemap

我尝试使用Basemap功能创建类似here所示的图表,但使用this数据。

这是我的代码:

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 个答案:

答案 0 :(得分:1)

似乎数据包含的数据远多于Basemap图中的数据范围 您将通过使用更多网格点获得所需的绘图,例如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