我有一个数据帧,df和pm1和pm25列。我想展示一个图表(用Plotly)说明这两个信号的相关性。到目前为止,我已经成功地展示了散点图,但我没有画出信号之间合适的相关线。到目前为止,我已经尝试过:
denominator=df.pm1**2-df.pm1.mean()*df.pm1.sum()
print('denominator',denominator)
m=(df.pm1.dot(df.pm25)-df.pm25.mean()*df.pm1.sum())/denominator
b=(df.pm25.mean()*df.pm1.dot(df.pm1)-df.pm1.mean()*df.pm1.dot(df.pm25))/denominator
y_pred=m*df.pm1+b
lineOfBestFit = go.Scattergl(
x=df.pm1,
y=y_pred,
name='Line of best fit',
line=dict(
color='red',
)
)
data = [dataPoints, lineOfBestFit]
figure = go.Figure(data=data)
figure.show()
绘图:
我怎样才能使基线正确绘制
Plotly还附带了statsmodels的本机包装器,用于打印(非线性)直线:
从他们的文档中引用:https://plotly.com/python/linear-fits/
更新1:
现在,plotly express可以轻松地处理long and wide format(在您的例子中是后者)的数据,只需绘制回归线:
在问题末尾完成宽数据的代码片段
如果希望回归线突出,可以直接通过以下方式编辑线颜色:
您可以访问回归参数,如
alpha
和betathrough
:您甚至可以通过以下方式请求非线性拟合:
那么那些长格式呢?这就是plotly express展示其一些真正威力的地方。如果以内置数据集
px.data.gapminder
为例,则可以通过指定color="continent"
来触发国家/地区数组的单个行:长格式的完整代码段
如果你想在模型选择和输出方面有更大的灵活性,你可以参考我对下面这篇文章的原始答案。但首先,在我回答的开头,这里有一个完整的例子片段:
宽数据的完整片段
原始答案:
对于回归分析,我喜欢使用
statsmodels.api
或sklearn.linear_model
。我还喜欢在一个数据框架中组织数据和回归结果。这里有一种方法可以以干净、有条理的方式完成您想要的任务:使用sklearn或statsmodels绘图:
使用sklearn进行编码:
使用statsmodels的代码:
相关问题 更多 >
编程相关推荐