plotly.graph_objects 的替代品,用于绘制二维线(python 或 js)
Alternatives to plotly.graph_objects for plotting 2D lines (python or js)
我目前正在尝试绘制具有从地图 api 到汇总图的连接边的经纬度点。我目前正在使用 plotly 从 python 执行此操作,但我的问题是水平轴 'zooms' 或拉伸,如记录 here resulting in something like this:
任何人都可以在 js 或 python 中推荐一个 2D 矢量绘图库来完成这个而不用拉伸吗?
我使用了 NetworkX 和 matplotlib.pyplot 库。
- 您对数据的定义非常抽象。因此,我使用了简单易用的 osmnx,它提供了源节点和边的简单方法
- edges 将是 LineString,plotly 想要一个经纬度列表,因此提取 co-ordinates 并展平
- 已经证明
- 线迹,显然这是拉伸的(如预期的那样),因为它没有考虑线性 space
上的几何投影
- line mapbox trace
- 叶
获取一些点和连接的边
import osmnx as ox
import plotly.express as px
import numpy as np
# get some edges
gdf = ox.geocode_to_gdf('Topsham, Devon')
G = ox.graph_from_polygon(gdf.loc[0,"geometry"], network_type='drive')
gdf_nodes, gdf_edges = ox.graph_to_gdfs(G)
情节线
- 这些被拉伸了
# plotly lines are arrays of points with each line separated by None
px.line(
x=np.concatenate(
gdf_edges["geometry"].apply(lambda g: [c[1] for c in g.coords] + [None]).values
),
y=np.concatenate(
gdf_edges["geometry"].apply(lambda g: [c[0] for c in g.coords] + [None]).values
),
)
plotly mapbox
- 无拉伸
px.line_mapbox(
lat=np.concatenate(
gdf_edges["geometry"].apply(lambda g: [c[1] for c in g.coords] + [None]).values
),
lon=np.concatenate(
gdf_edges["geometry"].apply(lambda g: [c[0] for c in g.coords] + [None]).values
),
).update_layout(mapbox={"style":"carto-positron", "zoom":13})
folium(使用 geopandas)
gdf_edges.explore()
我目前正在尝试绘制具有从地图 api 到汇总图的连接边的经纬度点。我目前正在使用 plotly 从 python 执行此操作,但我的问题是水平轴 'zooms' 或拉伸,如记录 here resulting in something like this:
任何人都可以在 js 或 python 中推荐一个 2D 矢量绘图库来完成这个而不用拉伸吗?
我使用了 NetworkX 和 matplotlib.pyplot 库。
- 您对数据的定义非常抽象。因此,我使用了简单易用的 osmnx,它提供了源节点和边的简单方法
- edges 将是 LineString,plotly 想要一个经纬度列表,因此提取 co-ordinates 并展平
- 已经证明
- 线迹,显然这是拉伸的(如预期的那样),因为它没有考虑线性 space 上的几何投影
- line mapbox trace
- 叶
获取一些点和连接的边
import osmnx as ox
import plotly.express as px
import numpy as np
# get some edges
gdf = ox.geocode_to_gdf('Topsham, Devon')
G = ox.graph_from_polygon(gdf.loc[0,"geometry"], network_type='drive')
gdf_nodes, gdf_edges = ox.graph_to_gdfs(G)
情节线
- 这些被拉伸了
# plotly lines are arrays of points with each line separated by None
px.line(
x=np.concatenate(
gdf_edges["geometry"].apply(lambda g: [c[1] for c in g.coords] + [None]).values
),
y=np.concatenate(
gdf_edges["geometry"].apply(lambda g: [c[0] for c in g.coords] + [None]).values
),
)
plotly mapbox
- 无拉伸
px.line_mapbox(
lat=np.concatenate(
gdf_edges["geometry"].apply(lambda g: [c[1] for c in g.coords] + [None]).values
),
lon=np.concatenate(
gdf_edges["geometry"].apply(lambda g: [c[0] for c in g.coords] + [None]).values
),
).update_layout(mapbox={"style":"carto-positron", "zoom":13})
folium(使用 geopandas)
gdf_edges.explore()