我有一个用
plotly express
制作的 2D 散点图,包括 2 种类型的点 - 在名为 'color' 的数据帧列中描述 - 使用随时间推移的动画帧(以秒为单位)。
我正在寻找一种方法来将 Voronoi 图添加到该图中。到目前为止,我的大部分研究都让我用
matplotlib
和 scipy
解决了类似的问题,但没有用plotly...
下面是部分图代码:
fig = px.scatter(df, x = 'x', y = 'y', color = 'color',
color_discrete_map = {'Red': 'red', 'Blue': 'blue'},
width=800, height=600, animation_frame = 'time (seconds)')
fig.layout.updatemenus[0].buttons[0].args[1]["frame"]["duration"] = 90
fig.show()
有谁知道有什么办法吗?或者一份文档 - 除了 Plotly 文档,我浏览了好几次 - 可以提供帮助吗?
提前致谢!
晚了好几年。但据我所知plotly没有办法解决这个问题。我认为他们没有一个库来生成 Voronoi 曲面细分,也没有“开箱即用”的绘图。
据我发现,scipy确实有很好的资源,但绘图示例倾向于使用matplotlib。
我也遇到了同样的问题,我希望这些 Voronoi 线出现在用 plotlyexpress 制作的地图上。我必须直接使用 SciPy 源 中的代码,它计算图表的线条。这最终让我能够在绘图箱图上绘制 Voronoi 图线。
import plotly.express as px
from scipy.spatial import Voronoi, voronoi_plot_2d
vor = Voronoi(centers)
kfig = px.scatter_mapbox(df)
vor = Voronoi(df.centers)
center = vor.points.mean(axis=0)
ptp_bound = vor.points.ptp(axis=0)
# source!: SciPy
finite_segments = []
infinite_segments = []
for pointidx, simplex in zip(vor.ridge_points, vor.ridge_vertices):
simplex = np.asarray(simplex)
if np.all(simplex >= 0):
finite_segments.append(vor.vertices[simplex])
else:
i = simplex[simplex >= 0][0] # finite end Voronoi vertex
t = vor.points[pointidx[1]] - vor.points[pointidx[0]] # tangent
t /= np.linalg.norm(t)
n = np.array([-t[1], t[0]]) # normal
midpoint = vor.points[pointidx].mean(axis=0)
direction = np.sign(np.dot(midpoint - center, n)) * n
if (vor.furthest_site):
direction = -direction
far_point = vor.vertices[i] + direction * ptp_bound.max()
infinite_segments.append([vor.vertices[i], far_point])
fsidx = None
for i, fs in enumerate(finite_segments):
fsidx = i
st = fs[0]
end = fs[1]
kfig.add_trace(go.Scattermapbox(
mode = "markers+lines",
lon = [ st[0], end[0] ],
lat = [ st[1], end[1] ],
marker = {'size': 5}))
ifidx = None
for i, fs in enumerate(infinite_segments):
ifidx = i
st = fs[0]
end = fs[1]
kfig.add_trace(go.Scattermapbox(
mode = "markers+lines",
lon = [ st[0], end[0] ],
lat = [ st[1], end[1] ],
marker = {'size': 5}))
kfig