1. ホーム
  2. python

[解決済み] PyPlotで滑らかな直線をプロットする

2022-04-28 06:02:04

質問

グラフをプロットする次のような簡単なスクリプトがあります。

import matplotlib.pyplot as plt
import numpy as np

T = np.array([6, 7, 8, 9, 10, 11, 12])
power = np.array([1.53E+03, 5.92E+02, 2.04E+02, 7.24E+01, 2.72E+01, 1.10E+01, 4.70E+00])

plt.plot(T,power)
plt.show()

今のところ、線は点から点へまっすぐ伸びており、見た目は問題ありませんが、私見ではもっと良くなると思います。私が欲しいのは、点と点の間の線を滑らかにすることです。Gnuplot では次のように描画していました。 smooth cplines .

PyPlot でこれを行う簡単な方法はありますか? いくつかのチュートリアルを見つけましたが、どれもかなり複雑なようです。

どのように解決するのですか?

を使用することができます。 scipy.interpolate.spline を使って、自分でデータを平滑化することができます。

from scipy.interpolate import spline

# 300 represents number of points to make between T.min and T.max
xnew = np.linspace(T.min(), T.max(), 300)  

power_smooth = spline(T, power, xnew)

plt.plot(xnew,power_smooth)
plt.show()


spline は scipy 0.19.0 で非推奨になりました。代わりに BSpline クラスを使ってください。

から切り替えて spline から BSpline は、単純なコピー&ペーストではなく、少し手を加える必要があります。

from scipy.interpolate import make_interp_spline, BSpline

# 300 represents number of points to make between T.min and T.max
xnew = np.linspace(T.min(), T.max(), 300) 

spl = make_interp_spline(T, power, k=3)  # type: BSpline
power_smooth = spl(xnew)

plt.plot(xnew, power_smooth)
plt.show()


後です。