Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,choropleth贴图如何与着色光栅相结合?_Python_Rasterio_Datashader_Geoviews - Fatal编程技术网

在Python中,choropleth贴图如何与着色光栅相结合?

在Python中,choropleth贴图如何与着色光栅相结合?,python,rasterio,datashader,geoviews,Python,Rasterio,Datashader,Geoviews,我想在地图上描绘一些地区的特征,但由于人口密度非常不均匀,较大的瓷砖会误导人们的注意力。想一想邮政编码的平均值(比如考试分数) 高分辨率地图可用于不同的居住地区,甚至其中的密度。下面的Python代码根据每个像素的平均密度生成一个彩色光栅 然而,我真正需要的是从同一地区的choropleth地图(本例中为匈牙利的邮政编码)着色,但着色只影响光栅上显示的点。光栅只能确定像素的伽马(或者在某些3D模拟中可能是高度)。做这件事的好方法是什么 一个光栅.蒙版.蒙版不知怎的 (顺便说一句,带邮政编码边界的

我想在地图上描绘一些地区的特征,但由于人口密度非常不均匀,较大的瓷砖会误导人们的注意力。想一想邮政编码的平均值(比如考试分数)

高分辨率地图可用于不同的居住地区,甚至其中的密度。下面的Python代码根据每个像素的平均密度生成一个彩色光栅

然而,我真正需要的是从同一地区的choropleth地图(本例中为匈牙利的邮政编码)着色,但着色只影响光栅上显示的点。光栅只能确定像素的伽马(或者在某些3D模拟中可能是高度)。做这件事的好方法是什么

一个光栅.蒙版.蒙版不知怎的

(顺便说一句,带邮政编码边界的覆盖也不错,但我更了解如何使用
GeoViews


Datashader将允许您将多种类型的数据组合到一个通用的光栅形状中,在该形状中,您可以使用基于NumPy的xarray操作进行任意制作或过滤。例如,您可以将choropleth渲染为多边形,然后遮罩无人居住的区域。如何按面积进行规范化取决于您,可能会变得非常复杂,但一旦您准确定义了您打算做什么,就应该是可行的。有关如何执行此操作的示例,请参见处的
转换
代码,如中所示:

def transform(overlay):
    picks = overlay.get(0).redim(pickup_x='x', pickup_y='y')
    drops = overlay.get(1).redim(dropoff_x='x', dropoff_y='y')
    pick_agg = picks.data.Count.data
    drop_agg = drops.data.Count.data
    more_picks = picks.clone(picks.data.where(pick_agg>drop_agg))
    more_drops = drops.clone(drops.data.where(drop_agg>pick_agg))
    return (hd.shade(more_drops, cmap=['lightcyan', "blue"]) *
            hd.shade(more_picks, cmap=['mistyrose', "red"]))

picks = hv.Points(df, ['pickup_x',  'pickup_y'])
drops = hv.Points(df, ['dropoff_x', 'dropoff_y'])
((hd.rasterize(picks) * hd.rasterize(drops))).apply(transform).opts(
    bgcolor='white', xaxis=None, yaxis=None, width=900, height=500)
在这里,它并不是真的掩蔽任何东西,但希望你能看到掩蔽是如何工作的;只需获取一些光栅化对象,然后使用其他光栅化对象进行数学运算。在这里,所有步骤都是在使用HoloViews对象的函数中完成的,这样您就可以有一个实时交互绘图,但是您可能希望使用datashader.org上更基本的代码来解决这个问题,在这里,您只需要处理xarray对象,而不需要HoloViews管道;然后,您可以将为单个xarray所做的工作转换为HoloViews管道,该管道将允许使用平移、缩放、轴等进行完全交互

def transform(overlay):
    picks = overlay.get(0).redim(pickup_x='x', pickup_y='y')
    drops = overlay.get(1).redim(dropoff_x='x', dropoff_y='y')
    pick_agg = picks.data.Count.data
    drop_agg = drops.data.Count.data
    more_picks = picks.clone(picks.data.where(pick_agg>drop_agg))
    more_drops = drops.clone(drops.data.where(drop_agg>pick_agg))
    return (hd.shade(more_drops, cmap=['lightcyan', "blue"]) *
            hd.shade(more_picks, cmap=['mistyrose', "red"]))

picks = hv.Points(df, ['pickup_x',  'pickup_y'])
drops = hv.Points(df, ['dropoff_x', 'dropoff_y'])
((hd.rasterize(picks) * hd.rasterize(drops))).apply(transform).opts(
    bgcolor='white', xaxis=None, yaxis=None, width=900, height=500)