This article is available in: English
この記事はplotlyでwireframeを作成する際の備忘録です。
plotlyはインタラクティブなグラフを簡単に作ることができるライブラリで、グラフをグリグリ動かすことができます。
plotlyでは、matplotlibのplot_wireframe()のようなワイヤーフレームを可視化する関数が見つからなかったので、つくってみました。
import numpy as np
import plotly.graph_objs as go
import plotly.io as pio
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
xx, yy = np.meshgrid(x, y)
z = xx**2 - yy**2
def plot_wireframe(xx, yy, z, color='#0066FF', linewidth=1):
"""ワイヤーフレームをプロットする"""
line_marker = dict(color=color, width=linewidth)
lines = []
for i, j, k in zip(xx, yy, z):
lines.append(go.Scatter3d(x=i, y=j, z=k, mode='lines', line=line_marker))
lines.append(go.Scatter3d(x=j, y=i, z=-k, mode='lines', line=line_marker))
layout = go.Layout(showlegend=False)
return go.Figure(data=lines, layout=layout)
fig = plot_wireframe(xx, yy, z)
fig.update_layout(margin=dict(l=0, r=0, b=0, t=0))
fig.show()
# pio.write_html(fig, 'plotly-wireframe.html', include_plotlyjs='cdn', full_html=False) # グラフを保存
おまけ
matplotlibでのワイヤーフレーム可視化
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import seaborn as sns
sns.set(style='whitegrid')
%config InlineBackend.figure_formats = ['svg']
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
xx, yy = np.meshgrid(x, y)
z = xx**2 - yy**2
ax = Axes3D(plt.figure())
ax.plot_wireframe(xx, yy, z, linewidth=1)
# plt.savefig('fig.svg') # グラフを保存
plt.show()
リンク