【问题标题】:Bokeh not producing figure after adding patches over gmap在 gmap 上添加补丁后散景不产生图形
【发布时间】:2020-06-10 20:54:57
【问题描述】:

以下代码(其中 testdata.json 为 https://pastebin.com/tCZQGMsK)将生成带有补丁的图形,但是当我尝试在 gmap 上制作完全相同的补丁时,补丁不会显示出来。

import geopandas as gpd
import json
from bokeh.models import GeoJSONDataSource, GMapOptions, LinearColorMapper
from bokeh.io import output_notebook, show, output_file
from bokeh.plotting import gmap, figure


file = gpd.read_file("testdata.json")
j = json.loads(file.to_json())
data = json.dumps(j)
data_source = GeoJSONDataSource(geojson = data)

output_notebook()
map_options = GMapOptions(lat=30.2861, lng=-97.7394, map_type="roadmap", zoom=11)

#this produces a figure
fig = figure()
fig.patches('xs','ys', source = data_source,
          line_color = 'black', line_width = 0.25, fill_alpha = 1)

#there are no patches on this
plot = gmap("i keep posting this with my api key...", map_options, title = "test", tools="hover")

plot.patches('xs','ys', source = data_source,
          line_color = 'black', line_width = 0.25, fill_alpha = 1)
show(plot)
output_file("gmap.html")

【问题讨论】:

    标签: python gis bokeh geopandas


    【解决方案1】:

    它对我来说很好用 - 确保您的坐标和颜色映射器是正确的。还要检查 JavaScript 控制台或 Python 输出中是否有任何错误。

    关于绘图对象没有补丁功能 - 这是因为您明确使用绘图模型而不是使用更高级别的 API。请参阅下面的示例。

    from bokeh.io import show
    from bokeh.models import ColumnDataSource, GMapOptions
    from bokeh.plotting import gmap
    
    map_options = GMapOptions(lat=30.2861, lng=-97.7394, map_type="roadmap", zoom=11)
    
    p = gmap(%YOUR_API_KEY%, map_options, title="Austin")
    
    source = ColumnDataSource(data=dict(lats=[[30.29, 30.20, 30.29]],
                                        lons=[[-97.70, -97.74, -97.78]]))
    
    p.patches(xs="lons", ys="lats", fill_alpha=0.8, source=source)
    
    show(p)
    

    更新,因为您已经编辑了您的问题。

    你不需要geopandasjson,直接读取文件并传递给数据源即可:

    with open("testdata.json") as file:
        data_source = GeoJSONDataSource(geojson=file.read())
    

    但更重要的是你的数据不好。查看 JSON 中的坐标。它有像3538864.641298605 这样的数字,显然既不是纬度也不是经度。这正是您在 GMap 上看不到任何内容的原因。

    【讨论】:

    • 感谢尤金的回复!我已经进行了更改,但由于某种原因它仍然会产生一个空图!我认为当我从 GeoJSONDataSource 添加补丁时可能是一个错误,但是当我从头开始创建一个图形并添加两个不同的 geojsondatasources 时,它不会出错并生成一个图形,这两个 geojsons 相互叠加。如果我只是更改正在修改的图形的名称(从 tractfigure 到 mapplot)并且不修改 patch 函数,我的 gmap 将返回不产生任何内容。我将尝试看看是否可以使用较小的数据集复制它。
    • 也许吧。如果没有包含数据样本的最小可重复示例,我真的无法告诉您任何事情。
    • 事实证明确实有效......当我可以真正重现错误时,我会更新你
    • 好的,我刚刚写了这个问题。代码应该重现错误
    • 另外,我发现一些有趣的事情是在 geopandas 导入之后添加“file = file.to_crs("EPSG:900913")" 将回到不生成地图(而不是生成没有点的地图)。将其更改为 ESPG:4326 将再次生成一个没有补丁的地图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2017-12-26
    相关资源
    最近更新 更多