【问题标题】:geoviews dataset converts lat/lon into small decimals when overlaying a holoviews tile sourcegeoviews 数据集在覆盖 holoviews 平铺源时将纬度/经度转换为小数
【发布时间】:2020-09-29 02:59:56
【问题描述】:

我有一个 geoviews 数据集,我终于开始工作了。它是一组 GPS 站的纬度、经度和速度,在它们之间进行插值。这些值位于规则网格上。

我按照https://geoviews.org/user_guide/Gridded_Datasets_II.html 的示例创建了一个集合,如下所示

dataset = gv.Dataset(df, kdims=['Lon', 'Lat'], vdims ='Z')
ensemble = dataset.to.heatmap( ['Lon', 'Lat'], vdims = 'Z')

当我调用 ensemble 时,我得到一个带有正确纬度和经度值的热图,如下所示 注意 lats 和 lons 在这里是正确的。现在我将再次运行上面显示的被注释掉的行。这是输出

我已经尝试过使用不同的磁贴来源,希望可以解决它。我还尝试了覆盖 geoviews 功能,例如海岸线 (gf.coastline()),当我运行时我收到错误 TypeError: range() got an unexpected keyword argument 'dimension_range'

我真的很想爱上这个包,它看起来很强大,但我很难让事情发挥作用。我还将为其他能够创建热图并在其下显示底图的软件包提供建议。最好具有内置缩放功能。

谢谢

【问题讨论】:

  • 我也不想这样做,我已经尝试使用 hvplot 并设置 geo=True,但由于某些未知原因,它不起作用
  • 它说地理选项不能与 kind='scatter' 一起使用。我使用 scatter 是因为我猜没有其他方法可以与 pandas 数据帧一起使用?

标签: python holoviews hvplot geoviews


【解决方案1】:

这里的问题是 HeatMap 不是 GeoViews 元素,因此它不知道在地理环境中该做什么。相反,如果您使用gv.Imagegv.QuadMesh(取决于您的数据),GeoViews 将自动假定您的数据采用纬度和经度,并将其投影到瓦片源使用的墨卡托坐标系。所以我建议像这样改变它:

ensemble = dataset.to(gv.Image, ['Lon', 'Lat'], vdims='Z')

【讨论】:

  • 当我运行时,我收到错误“DataError:图像类型需要网格数据,PandasInterface 是柱状的。要将柱状数据显示为网格,请使用 HeatMap 元素或聚合数据。”如果我尝试 QuadMesh,我会收到另一个错误“DataError:没有可用的存储后端能够支持提供的数据格式。”这就是我使用热图功能的原因,因为它是唯一适合我的功能。
  • 此消息表明您的数据与您尝试使用的数据不匹配。如果它已经是网格数据,Pandas 是一个奇怪的选择; Pandas 处理任意数据点,如果它们直接落在规则网格上,则应使用网格数据结构(如 xarray 或 Numpy)表示。如果它们还没有网格化,您需要将它们聚合到一个常规网格中,您可以使用例如from holoviews.operation.datashader import rasterize ; rasterize(dataset.to(gv.Points, ['Lon', 'Lat'], vdims='Z'))。不过,如果没有您的实际数据,就很难判断。
猜你喜欢
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 2015-05-11
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多