绘图Python中的趋势线

绘图Python中的趋势线,python,plotly,trendline,Python,Plotly,Trendline,我正在使用Plotly在Python中生成一个绘图,它以时间序列的形式显示数据。我正在使用SQLite数据库中的以下数据(如下日期和行): 有些数据是重叠的(同一天有多个实例),但对于拟合线来说,这可能无关紧要。我的代码如下所示: import sqlite3 import plotly.plotly as py from plotly.graph_objs import * import numpy as np db = sqlite3.connect("Applications.db")

我正在使用Plotly在Python中生成一个绘图,它以时间序列的形式显示数据。我正在使用SQLite数据库中的以下数据(如下日期和行):

有些数据是重叠的(同一天有多个实例),但对于拟合线来说,这可能无关紧要。我的代码如下所示:

import sqlite3
import plotly.plotly as py
from plotly.graph_objs import *
import numpy as np

db = sqlite3.connect("Applications.db")
cursor = db.cursor()

cursor.execute('SELECT date FROM applications ORDER BY date(date) DESC')
dates = cursor.fetchall()
cursor.execute('SELECT lines FROM applications ORDER BY date(date) DESC')
lines = cursor.fetchall()

trace0 = Scatter(
    x=dates,
    y=lines,
    name='Amount of lines',
    mode='markers'
)
trace1 = Scatter(
    x=dates,
    y=lines,
    name='Fit',
    mode='markers'
)
data = Data([trace0, trace1])

py.iplot(data, filename = 'date-axes')
如何根据这些数据使trace1成为拟合的趋势线?也就是说,显示数据开发的平滑表示。

Per Plotly support:“不幸的是,fit现在没有通过API公开。我们正在努力将fit GUI添加到IPython界面,最终添加到API中”(2015年9月25日)

经过大量的阅读和谷歌搜索,我发现最简单的方法是通过Matplotlib、Numbpy和SciPy。清理了一点数据后,以下代码开始工作:

import plotly.plotly as py
import plotly.tools as tls
from plotly.graph_objs import *
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as dates

def line(x, a, b):
    return a * x + b

popt, pcov = curve_fit(line, trend_dates.ravel(), trend_lines.ravel())

fig1 = plt.figure(figsize=(8,6))
plt.plot_date(new_x, trend_lines, 'o', label='Lines')
z = np.polyfit(new_x, trend_lines, 1)
p = np.poly1d(z)
plt.plot(new_x, p(new_x), '-', label='Fit')
plt.title('Lines per day')
fig = tls.mpl_to_plotly(fig1)
fig['layout'].update(showlegend=True)
fig.strip_style()
py.iplot(fig)
其中,基本上
new\u x
是Matplotlib预期的日期,而
trend\u行
是问题中的常规数据。这不是一个完整的示例,因为前面提到的大量库的数据清理和导入都在前面,但它显示了一种将Plotly图形作为输出,但经过Matplotlib、Numbpy和SciPy的方法。

每个Plotly支持:“不幸的是,fits目前没有通过API公开。我们正在努力将FitGUI添加到IPython界面,最终添加到API中”(2015年9月25日)

经过大量的阅读和谷歌搜索,我发现最简单的方法是通过Matplotlib、Numbpy和SciPy

import plotly.plotly as py
import plotly.tools as tls
from plotly.graph_objs import *
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as dates

def line(x, a, b):
    return a * x + b

popt, pcov = curve_fit(line, trend_dates.ravel(), trend_lines.ravel())

fig1 = plt.figure(figsize=(8,6))
plt.plot_date(new_x, trend_lines, 'o', label='Lines')
z = np.polyfit(new_x, trend_lines, 1)
p = np.poly1d(z)
plt.plot(new_x, p(new_x), '-', label='Fit')
plt.title('Lines per day')
fig = tls.mpl_to_plotly(fig1)
fig['layout'].update(showlegend=True)
fig.strip_style()
py.iplot(fig)
其中,基本上
new\u x
是Matplotlib所期望的日期,而
trend\u line
是问题中的常规数据。这不是一个完整的示例,因为前面有大量的库数据清理和导入,但它展示了一种将绘图图形作为输出,但通过Matplotlib,N的方法软弱无力的