前提・実現したいこと
質問を見てくださりありがとうございます.
現在私は,3次元のグラフ上に,点をプロットして,それを直線ではなく,曲線でつなげようとしています.(調べた感じは,Bスプライン補間)
イメージとして,図1のようなものから,図2のようなものを作ろうと考えています.
図1
図2
以下のサイトを見本にして作ったのですがうまくいきません.
https://qiita.com/Ken227/items/aee6c82ec6bab92e6abf
発生している問題・エラーメッセージ
File "q.py", line 43, in <module> tck, u= interpolate.splprep(data, k=5) File "C:\Users\N\AppData\Local\Programs\Python\Python38\lib\site-packages\scipy\interpolate\fitpack.py", line 156, in splprep res = _impl.splprep(x, w, u, ub, ue, k, task, s, t, full_output, nest, per, File "C:\Users\N\AppData\Local\Programs\Python\Python38\lib\site-packages\scipy\interpolate\_fitpack_impl.py", line 220, in splprep idim, m = x.shape ValueError: too many values to unpack (expected 2)
該当のソースコード
python
1from scipy import interpolate 2from mpl_toolkits.mplot3d import Axes3D 3import numpy as np 4import matplotlib.pyplot as plt 5 6 7x = [0, 0, 1, 0] 8y = [0, -1, 0, -1] 9z = [0, -1, -2, -3] 10 11data = [[x],[y],[z]] 12 13tck, u= interpolate.splprep(data, k=5) 14 15new = interpolate.splev(np.linspace(0,1,500), tck, der=0) 16 17 18fig = plt.figure() 19ax = Axes3D(fig) 20ax.plot(data[0], data[1], data[2]) 21ax.plot(new[0], new[1], new[2], label='fit', lw =2, c='red') 22ax.legend() 23plt.show()
試したこと
2次元の場合にはうまくいくので,interpolate自体が3次元に対応していないということ?
3次元の場合は違うモジュールを使う必要がある?
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。