作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 updatemenus 更新散点图,它将我要更新的字段作为参数:
dict(label = category,
method = 'update',
args = [dict(x=[df[(df['cat_name'] == category) & (df['cat_level'] == cat_level)]['value']],
y=[df[(df['cat_name'] == category) & (df['cat_level'] == cat_level)]['count']],
meta = [["Category:" + category]]
)])
我要添加第二条轨迹(这是一条最佳拟合线),我希望随着菜单选择的变化而更新(当用户选择菜单类别时,该类别数据的视觉更新 - 因此最佳拟合线应该改变)。
有没有一种聪明的方法来构建它?
最佳答案
如果您的源是一个 pandas 数据框,这里的关键是为它自己的数据框中的每一列构建一个线性模型,然后使用如下循环为每个源列和关联的线性模型添加一个带有按钮的下拉菜单:
for col in df.columns:
buttons.append(dict(method='restyle',
label=col,
visible=True,
args=[{'y':[df[col], df_reg[col+'_model']],
'x':[df.index],
'type':'scatter'}],
)
)
图 1: A 列和关联的线性模型:
图 2:B 列和关联的线性模型:
具有可重现数据样本的完整代码:
# imports
import plotly.graph_objs as go
import numpy as np
import pandas as pd
import plotly.express as px
from datetime import datetime
# conda install -c anaconda scikit-learn
from sklearn.linear_model import LinearRegression #(conda install -c anaconda scikit-learn)
# data sample
nperiods=200
np.random.seed(123)
df = pd.DataFrame(np.random.randint(-10,12,size=(nperiods, 4)), columns=list('ABCD'))
datelist = pd.date_range(datetime(2020, 1, 1).strftime('%Y-%m-%d'), periods=nperiods).tolist()
df['dates'] = datelist
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
df.iloc[0]=0
df=df.cumsum()
# build dataframe df_reg with linear models using sklearn
# for each column in df
df_reg = pd.DataFrame()
# regression
for col in df:
#print(col)
reg = LinearRegression().fit(np.vstack(np.arange(0, len(df))), df[col].values)
df_reg[col+'_model'] = reg.predict(np.vstack(np.arange(0, len(df))))
#plotly
fig=go.Figure()
# set up one trace for source data in df
# and one trace for each linear model in df_reg
fig.add_trace(go.Scatter(x=df.index,
y=df[df.columns[0]],
visible=True))
fig.add_trace(go.Scatter(x=df.index,
y=df_reg[df_reg.columns[0]],
visible=True))
# Define updatemenus
updatemenu=[]
buttons=[]
# add buttons to select column in df
# and the associated linear model in df_reg
for col in df.columns:
buttons.append(dict(method='restyle',
label=col,
visible=True,
args=[{'y':[df[col], df_reg[col+'_model']],
'x':[df.index],
'type':'scatter'}],
)
)
# some adjustments to the updatemenus
updatemenu=[]
your_menu=dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons']=buttons
updatemenu[0]['direction']='down'
updatemenu[0]['showactive']=True
# add dropdown menus to the figure
fig.update_layout(showlegend=False, updatemenus=updatemenu)
fig.show()
关于python - Plotly:如何使用 updatemenus 更新具有多个依赖轨迹的图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61898599/
这是 Plotly 的后续问题:Plotly: How do the buttons for the update menus really work? 考虑下面的代码片段产生的以下 plotly 图
我正在使用 updatemenus 更新散点图,它将我要更新的字段作为参数: dict(label = category, method = 'update', args =
我是一名优秀的程序员,十分优秀!