我试图将geoviews.tile_sources
层与datashade
层结合起来。这两个层各自产生正确的轴(见图片),但当合并(使用*
)时,比例就会扭曲。在
import numpy as np
import pandas as pd
import holoviews as hv
from geoviews.tile_sources import EsriImagery
from holoviews.operation.datashader import datashade
hv.extension('bokeh')
lats = np.random.uniform(51.111, 51.222, 10000)
longs = np.random.uniform(1.31, 1.33, 10000)
df = pd.DataFrame({"latitude": lats, "longitude": longs})
points = hv.Points(df, ['longitude', 'latitude'])
shader = datashade(points)
EsriImagery * shader
但是,两个单独的图都是正确的:
^{pr2}$
HoloViews元素对数据的坐标系一无所知,而tile源是在墨卡托坐标系中定义的。所以当你覆盖高压点在平铺源上,它假设您的坐标已经在墨卡托坐标中。为了覆盖位于不同坐标系中的数据,您应该使用GeoViews元素,例如在您的例子中
gv.Points
,如{a1}所述。这将确保您的点正确解释为纬度/经度对,并且可以自动投影到与平铺源相同的坐标系中。在您尝试将PlateCarree坐标系中的HoloViews对象与webmercator坐标系中的GeoViews对象合并,两者相差几百万倍。你可以通过改变高压点()至gv点(),它将是PlateCaree坐标中的GeoViews对象,当显示tile层时,GeoViews将投影到与tile层相同的坐标系中。你也可以考虑使用gv.项目点()在开始时只进行一次投影,而不是默认每次显示时都重新投影。在
相关问题 更多 >
编程相关推荐