我尝试使用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)
然而,我的结果只不过是奇怪的。
我想知道我错过了什么。
感谢。
答案 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()
使用更多网格点可以实现更精细的分辨率。例如。 gridsize=1000
: