我想使用平滑线连接以下points
,例如三次样条线
points = [(3.28,0.00),(4.00,0.50),(4.40,1.0),(4.60,1.52),(5.00,2.5),(5.00,3.34),(4.70,3.8)]
points = points + [(4.50,3.96),(4.20,4.0),(3.70,3.90),(3.00,3.5),(2.00,2.9)]
最后得到这样的橙色线(这个是使用矢量绘图语言Asymptote创建的)
我想知道如何以简单的方式在matplotlib中完成它。我已经看过类似的问题了,例如Generating smooth line graph using matplotlib,但直接使用该方法会产生这样的图形
这当然不是我想要的。
答案 0 :(得分:3)
您需要采用参数化方法,如下所示:
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
points = [(3.28,0.00),(4.00,0.50),(4.40,1.0),(4.60,1.52),(5.00,2.5),(5.00,3.34),(4.70,3.8)]
points = points + [(4.50,3.96),(4.20,4.0),(3.70,3.90),(3.00,3.5),(2.00,2.9)]
data = np.array(points)
tck,u = interpolate.splprep(data.transpose(), s=0)
unew = np.arange(0, 1.01, 0.01)
out = interpolate.splev(unew, tck)
plt.figure()
plt.plot(out[0], out[1], color='orange')
plt.plot(data[:,0], data[:,1], 'ob')
plt.show()
这基本上只是从here部分的最后一个例子重新编写。
答案 1 :(得分:0)
这几乎遵循圈子示例here。
from flask import Flask, render_template
import redis
r = redis.Redis()
@app.route("/")
def index():
return render_template("index.html", **r.hgetall("temp.index"))