如何使用 from scipy.interpolate import make_interp_spline 平滑 Python 中的这个图
How to smooth this Figure in Python with from scipy.interpolate import make_interp_spline
有一个情节我想让它变得平滑以便更好地表达。我试过 scipy.interpolate
,但它产生了这个错误:
raise ValueError("Expect x to be a 1-D sorted array_like.")
ValueError: Expect x to be a 1-D sorted array_like.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import interpolate
from scipy.interpolate import make_interp_spline
startnm = 550
endnm = 700
y = np.empty((10,))
for aci in range(0, 91, 10):
data = pd.read_csv(f".\30mg-ml-PSQD-withZNO-12-nov-21\{aci}.txt",
delimiter="\t") .to_numpy()[:, [0, 1]]
print(type(data[0, 0]))
starti, endi = 0, 0
for i in range(len(data[:, 0])):
if startnm < float(data[i, 0]) and starti == 0:
starti = i
elif endnm < float(data[i, 0]) and endi == 0:
endi = i
break
y[aci//10] = np.sum(data[starti:endi, 1])
theta = np.linspace(0, np.pi, 19)
output = []
x = []
for i in range(10):
temp0 = y[i]
output.append(temp0*np.cos(theta[i])/y.max())
x.append(temp0*np.sin(theta[i])/y.max())
pass
print(output)
print(x)
plt.title("title")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x, output,"--")
plt.plot(-np.array(x), output, "--")
x = np.sin(theta)*np.cos(theta)
y = np.cos(theta)*np.cos(theta)
plt.plot(x, y, "r")
plt.grid(color = 'green', linestyle = '--', linewidth = 0.5)
plt.show()
我想尽可能平滑这张图。我该怎么做?
错误只是告诉你 x
数组需要排序。
另请注意,make_interp_spline
不进行任何平滑处理。为此,请使用 splrep
.
我朋友解决这个问题的方法:
from scipy.interpolate import interp1d
f1 = interp1d(list(range(10)), x, kind="quadratic")
f2 = interp1d(list(range(10)), output, kind="quadratic")
xnew = f1(np.linspace(0, 8.9, 100))
outnew = f2(np.linspace(0, 8.9, 100))
plt.plot(xnew, outnew)
plt.plot(-xnew, outnew, "b")
有一个情节我想让它变得平滑以便更好地表达。我试过 scipy.interpolate
,但它产生了这个错误:
raise ValueError("Expect x to be a 1-D sorted array_like.") ValueError: Expect x to be a 1-D sorted array_like.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import interpolate
from scipy.interpolate import make_interp_spline
startnm = 550
endnm = 700
y = np.empty((10,))
for aci in range(0, 91, 10):
data = pd.read_csv(f".\30mg-ml-PSQD-withZNO-12-nov-21\{aci}.txt",
delimiter="\t") .to_numpy()[:, [0, 1]]
print(type(data[0, 0]))
starti, endi = 0, 0
for i in range(len(data[:, 0])):
if startnm < float(data[i, 0]) and starti == 0:
starti = i
elif endnm < float(data[i, 0]) and endi == 0:
endi = i
break
y[aci//10] = np.sum(data[starti:endi, 1])
theta = np.linspace(0, np.pi, 19)
output = []
x = []
for i in range(10):
temp0 = y[i]
output.append(temp0*np.cos(theta[i])/y.max())
x.append(temp0*np.sin(theta[i])/y.max())
pass
print(output)
print(x)
plt.title("title")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x, output,"--")
plt.plot(-np.array(x), output, "--")
x = np.sin(theta)*np.cos(theta)
y = np.cos(theta)*np.cos(theta)
plt.plot(x, y, "r")
plt.grid(color = 'green', linestyle = '--', linewidth = 0.5)
plt.show()
我想尽可能平滑这张图。我该怎么做?
错误只是告诉你 x
数组需要排序。
另请注意,make_interp_spline
不进行任何平滑处理。为此,请使用 splrep
.
我朋友解决这个问题的方法:
from scipy.interpolate import interp1d
f1 = interp1d(list(range(10)), x, kind="quadratic")
f2 = interp1d(list(range(10)), output, kind="quadratic")
xnew = f1(np.linspace(0, 8.9, 100))
outnew = f2(np.linspace(0, 8.9, 100))
plt.plot(xnew, outnew)
plt.plot(-xnew, outnew, "b")