【Python】Plotlyでwireframeを作成する

プログラミング

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()
タイトルとURLをコピーしました