【问题标题】:Bokeh multi_line plot not showing散景多线图未显示
【发布时间】:2020-07-22 21:16:11
【问题描述】:

我正在尝试在 Bokeh 中绘制一条多线,但由于某种原因它无法正常工作。 我读过一个带有熊猫的文件:

roads = pd.read_csv('path/file.csv')

生成的数据框如下所示:

    osm_id  code    fclass           name        ref    oneway  maxspeed    layer   bridge  tunnel               x                                              y
0   4264947 5152    cycleway         NaN         NaN      B        0         0        F        F    [4.9223553, 4.9223667, 4.9223853]                   [52.3654363, 52.3654277, 52.3654169]
1   4270144 5124    pedestrian      Dapperplein  NaN      B        0         0        F        F    [4.9279354, 4.9280225, 4.9280546, 4.928041, 4....   [52.3619809, 52.362025, 52.3621167, 52.3622213...
2   4270151 5153    footway      Zeeburgerstraat NaN      B        0         0        F        F    [4.9261096, 4.9260732, 4.9258198]                   [52.3663263, 52.3662732, 52.3661229]
3   4270806 5152    cycleway      Roomtuintjes   NaN      B        0         0        F        F    [4.9308652, 4.9308238, 4.9307548, 4.9304676, 4...   [52.3659402, 52.3657291, 52.3655389, 52.364919...
4   4277440 5124    pedestrian    Vondelpark     NaN      B        0         0        F        F    [4.881478, 4.8816828, 4.881693]                     [52.361566, 52.361699, 52.3617067]

当我尝试用散景绘制坐标时

source = ColumnDataSource(roads)

q = figure(title= "Roads", plot_width=900, plot_height=900)

q.multi_line('x', 'y', source = source, color='blue', line_width=0.5)

show(q)

它输出一个空图。

出了什么问题,有人可以帮助我吗?

谢谢!

【问题讨论】:

    标签: python pandas plot bokeh


    【解决方案1】:

    问题是列中的列表,这里是列表的字符串 repr。所以首先将两列都转换为列表::

    import ast
    
    roads = pd.read_csv('path/file.csv')
    
    roads['x'] = roads['x'].apply(ast.literal_eval)
    roads['y'] = roads['y'].apply(ast.literal_eval)
    

    另一种解决方案:

    import ast
    
    conv = lambda x: ast.literal_eval(x)
    roads = pd.read_csv('path/file.csv', converters={'x':conv, 'y':conv})
    

    source = ColumnDataSource(roads)
    
    q = figure(title= "Roads", plot_width=900, plot_height=900)
    
    q.multi_line('x', 'y', source = source, color='blue', line_width=0.5)
    
    show(q)
    

    【讨论】:

    • 当使用roads['x'] = roads['x'].apply(ast.literal_eval) roads['y'] = roads['y'].apply(ast.literal_eval) 使用roads 作为ColumnDataSource 时代码工作正常我不确定我是否理解需要将其连接到单独的数据帧
    • @borisvanax - 你是对的,那么解决方案更简单
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多