【问题标题】:Coloring edges in OSMnx graph based on edge attribute基于边缘属性的 OSMnx 图中的边缘着色
【发布时间】:2020-07-26 15:54:25
【问题描述】:

我想创建一个国家/地区内的道路地图,并根据其“高速公路”属性为边缘着色,以便高速公路为黄色、树干绿色等...

但是,当遵循 osmnx 示例文件并尝试复制时,我收到以下错误消息: 输入:

ec = ox.plot.get_edge_colors_by_attr(graph, attr='highway', cmap='plasma_r')

输出:

TypeError: '<=' not supported between instances of 'str' and 'list'

我假设这是因为“高速公路”不是数字变量? 这是我目前用于图表的代码

    graph = ox.io.load_graphml("graph.graphml")
    nodes, streets = ox.graph_to_gdfs(graph)
    streets.head()

输出:


       osmid  oneway lanes  ref    highway    junction    length                                           geometry              name maxspeed bridge tunnel access width service           u           v  key
0  659557392    True     1  410  secondary  roundabout    48.672  LINESTRING (-21.93067 64.05665, -21.93067 64.0...               NaN      NaN    NaN    NaN    NaN   NaN     NaN  6175252481  6175252453    0
1  659557393   False     2  410  secondary         NaN   132.007  LINESTRING (-21.93067 64.05665, -21.93057 64.0...   Kaldárselsvegur      NaN    NaN    NaN    NaN   NaN     NaN  6175252481  6275284224    0
2   48547677    True   NaN  430  secondary         NaN   237.337  LINESTRING (-21.72904 64.13621, -21.72959 64.1...     Skyggnisbraut       50    NaN    NaN    NaN   NaN     NaN  5070446594   616709938    0
3  160506796   False   NaN  430  secondary         NaN  2892.051  LINESTRING (-21.72904 64.13621, -21.72848 64.1...  Úlfarsfellsvegur       70    NaN    NaN    NaN   NaN     NaN  5070446594    56620274    0
4  157591872    True     2   41      trunk  roundabout    47.075  LINESTRING (-21.93736 64.06693, -21.93730 64.0...        Hlíðartorg       60    NaN    NaN    NaN   NaN     NaN    12886026    12885866    0

【问题讨论】:

标签: python networkx osmnx


【解决方案1】:

我假设这是因为“highway”不是数字变量?

是的。正如您在OSMnx docs 中看到的,ox.plot.get_edge_colors_by_attr 函数期望attr 参数是“数字边缘属性的名称”。在您的示例中,它不是数字。相反,您可以使用 ox.plot.get_colors function 为图中的每种高速公路类型获取一种颜色,然后根据每种高速公路类型获取边缘颜色列表:

import osmnx as ox
import pandas as pd
ox.config(use_cache=True, log_console=True)

G = ox.graph_from_place('Piedmont, CA, USA', network_type='drive')

# get one color for each highway type in the graph
edges = ox.graph_to_gdfs(G, nodes=False)
edge_types = edges['highway'].value_counts()
color_list = ox.plot.get_colors(n=len(edge_types), cmap='plasma_r')
color_mapper = pd.Series(color_list, index=edge_types.index).to_dict()

# get the color for each edge based on its highway type
ec = [color_mapper[d['highway']] for u, v, k, d in G.edges(keys=True, data=True)]
fig, ax = ox.plot_graph(G, edge_color=ec)

【讨论】:

  • 是的,就是这样!非常感谢!
  • @gboeing:你好,我不确定这个解决方案是否仍然有效,在我的情况下,它会在 ec, unhashable type: 'list' 上抛出一个错误。
  • 在创建图表时尝试设置simplify=False
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 2018-07-21
相关资源
最近更新 更多