我有一个Jupyter笔记本,其中包含用于通过离线Plotly生成3D散点图的代码。
这是我用来从称为subsetLog10
的数据帧中渲染一些数据的代码块:
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.graph_objs as go
import numpy as np
init_notebook_mode(connected=True)
x = subsetLog10.iloc[:, 0]
y = subsetLog10.iloc[:, 1]
z = subsetLog10.iloc[:, 2]
splot = go.Scatter3d(
x=np.array(x),
y=np.array(y),
z=np.array(z),
mode='markers',
marker=dict(
color='rgb(127, 127, 127)',
size=1,
symbol='circle',
line=dict(
color='rgb(204, 204, 204)',
width=1
)
)
)
pdata = [splot]
layout = go.Layout(
width=1024,
height=1024,
scene = dict(
xaxis = dict(title=x.name, range = [0,6]),
yaxis = dict(title=y.name, range = [0,6]),
zaxis = dict(title=z.name, range = [0,6]))
)
fig = go.Figure(data=pdata, layout=layout)
iplot(fig, image='svg', filename='scatterplot.svg', image_width=1280, image_height=1280)
在笔记本电脑中效果很好。
我可以与散点图进行交互,并在旋转/平移/等之后导出PNG。单击散点图边缘的相机图标,将其移至所需轨道。
但是,快照文件scatterplot.svg
是使用初始渲染设置导出的。这是一个问题,因为初始视图最终会切除部分轴刻度,刻度标签和轴标签。
是否有一种方法可以从中导出SVG,但仅在发生交互之后?
编辑
如果有用,我在这里发布了一个自包含的演示:
https://github.com/alexpreynolds/flow-cytometry-visualization
这应该演示散点图和SVG输出。