如何根据数据而不是纬度、经度坐标制作热图?R、 Matplotlib

如何根据数据而不是纬度、经度坐标制作热图?R、 Matplotlib,matplotlib,heatmap,Matplotlib,Heatmap,我有12000个数据点,它们的结构如下:(lon,lat,value)。我想制作一个关于这些值的数据热图,但我不想让热图受到x,y密度的影响。由于地理上的限制,在某些地区有更多的测量。我尝试过使用加权点的GoogleMapsAPI,但它们的实现仍然会影响点密度。 我想使用Python或R来实现这一点,因为我想生成一个向量格式的图像。目前,我的数据只有一个散点图,其中点由该位置的值着色。 理想情况下,图形应如下所示: 这是我的代码: #Create a map centered on Cana

我有12000个数据点,它们的结构如下:(lon,lat,value)。我想制作一个关于这些值的数据热图,但我不想让热图受到x,y密度的影响。由于地理上的限制,在某些地区有更多的测量。我尝试过使用加权点的GoogleMapsAPI,但它们的实现仍然会影响点密度。 我想使用Python或R来实现这一点,因为我想生成一个向量格式的图像。目前,我的数据只有一个散点图,其中点由该位置的值着色。

理想情况下,图形应如下所示:

这是我的代码:

#Create a map centered on Canada
maps = Basemap(projection = "merc", resolution = "l",area_thresh = 100,
               llcrnrlon = -143, llcrnrlat = 42, urcrnrlon = -50, urcrnrlat = 79)
maps.drawmapboundary(fill_color = "aqua", zorder = 1)
maps.fillcontinents(color='white',lake_color='aqua', zorder = 3)
maps.drawcountries(zorder = 5)
maps.drawstates(zorder = 7)

data = pd.read_csv("stats_by_coordinates.csv")
import matplotlib.cm as cm

vio_norm = np.log(data['vio']) # log normalize data
maxima = max(vio_norm) 
**# Scale data between ¨0 and 1 for color mapping**
vio_norm = [x/float(maxima) for x in vio_norm] 


x = []
y = []

for i in range(len(data)):
    lon,lat = maps(data['lon'][i], data['lat'][i]) #Convert to map coordinates
    x.append(lon)
    y.append(lat)

maps.scatter(x,y,zorder = 10, marker = "o",facecolor = vio_norm, edgecolor = "",
            alpha = 1.0,c = vio_norm,s = 1,lw = 0, cmap = py.cm.YlOrRd)
py.colorbar()
py.savefig('myimage.png', format='png', dpi=1200, bbox_inches = "tight") 

你希望最终的情节是什么样的?你想让热图显示多少?如果您在描述它时遇到问题,您可能希望显示您所想象的图片。你说“我不希望地图受到x,y密度的影响”是什么意思?目前这个问题还不清楚,无法回答。你说的“我不希望地图受到x,y密度的影响”是什么意思?如果我的数据点是(lon,lat,some value),我希望热图是“some value”,并且不受(x,y)对的接近程度的影响。这似乎是一个非常明确的问题,即热图需要有一个特定的单元大小。在您的案例中,什么决定了单元格的大小?如果多个点位于同一单元格内,会发生什么情况?请注意我第一次评论中的问题以及你的相应问题。我希望单元格大小为每对(lon,lat)。这样,在同一个单元中就不会有多个点,因为所有这些对都是唯一的。(lan,lot)是一个没有扩展的点。一个单元格有一个扩展。电池应该有多大?