Save Plotly 3D scatter as proper SVGPython

Программы на Python
Ответить
Anonymous
 Save Plotly 3D scatter as proper SVG

Сообщение Anonymous »

У меня есть очень простая трехмерная фигура, построенная с помощью Plotly в виде линий и дисков. Никаких поверхностей. Никакого освещения. Никакой сложности. Только строки и диски. Вот минимальный пример:

Код: Выделить всё

import numpy as np
import plotly.graph_objects as go

N_DISKS = 8
DISK_POINTS = 60
DISK_RADIUS = 0.4

# Centers along a helix
t = np.arange(N_DISKS)
centers = np.column_stack([
np.cos(t * np.pi / 3) * 1.2,
t * 0.9,
np.sin(t * np.pi / 3) * 1.2,
])

traces = []

lx, ly, lz = [], [], []
for i in range(len(centers) - 1):
lx += [centers[i, 0], centers[i+1, 0], None]
ly += [centers[i, 1], centers[i+1, 1], None]
lz += [centers[i, 2], centers[i+1, 2], None]

traces.append(go.Scatter3d(
x=lx, y=ly, z=lz,
mode="lines+markers",
line=dict(color="black", width=85),
marker=dict(color="black", size=30),
showlegend=False,
))
traces.append(go.Scatter3d(
x=lx, y=ly, z=lz,
mode="lines+markers",
line=dict(color="red", width=65),
marker=dict(color="red", size=24),
showlegend=False,
))

fig = go.Figure(data=traces)

fig.update_layout(
scene=dict(
xaxis=dict(visible=False),
yaxis=dict(visible=False),
zaxis=dict(visible=False),
camera=dict(eye=dict(x=0,y=2.5,z=0)),
aspectmode="cube",
),
margin=dict(l=0, r=0, t=0, b=0),
)

fig.show()
Изображение

Я хотел бы сохранить это как SVG. Технически я могу сделать это, вызвав Plotly.toImage на стороне JS как SVG, но экспорт из этого файла — это не на самом деле SVG, а просто PNG, завернутый в SVG. Я примерно понимаю, почему они это делают, поскольку они просто пишут в контекст WebGL, но при этом создается впечатление, что в этом нет смысла.
Итак, как мне получить настоящий вывод SVG из этого рисунка Plotly? Я понимаю, что могу написать другой конвейер рендеринга, который вообще пропускает Plotly (и я это сделал), но наверняка есть какой-то способ получить из этого настоящий SVG.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»