我正试图绘制一个火山图,并且我想根据Range Slider值来更改genomewideline_value,但是它不起作用。下面是我的示例代码:
import pandas as pd
import dash
from dash.dependencies import Input, Output
import dash_bio as dashbio
from dash import html, dcc
app = dash.Dash(__name__)
df = pd.read_csv('https://git.io/volcano_data1.csv')
app.layout = html.Div([
'Effect sizes',
dcc.RangeSlider(
id='default-volcanoplot-input',
min=-3,
max=3,
step=0.05,
marks={i: {'label': str(i)} for i in range(-3, 3)},
value=[-0.5, 1]
),
dcc.RangeSlider(
id='default-volcanoplot-input-2',
min=-3,
max=3,
step=0.05,
marks={j: {'label': str(j)} for j in range(-3, 3)},
value=[0.5]
),
html.Br(),
html.Div(
dcc.Graph(
id='dashbio-default-volcanoplot',
figure={}
)
)
])
@app.callback(
Output('dashbio-default-volcanoplot', 'figure'),
[Input('default-volcanoplot-input', 'value'),
Input('default-volcanoplot-input-2', 'value')]
)
def update_volcanoplot(effects,effects_2):
return dashbio.VolcanoPlot(
dataframe=df,
effect_size='EFFECTSIZE',
logp=True,
p='P',
snp=None,
gene='GENE',
genomewideline_value=effects_2,
genomewideline_width = 1,
effect_size_line=effects,
effect_size_line_width = 1,
xlabel='log2 Fold Change',
ylabel='-(p-adjusted)')
if __name__ == '__main__':
app.run_server(debug=False)在运行此代码时,出现了如下错误:ValueError: ('Lengths must match to compare', (9934,), (1,))
如果我将genomewideline_value=effects_2更改为genomewideline_value=0.5,它工作得很好,但我不能通过滑块改变它。
在这种情况下我该怎么办。谢谢。
发布于 2022-03-22 03:35:12
我不使用偶发或Dash,但我想我在运行代码时注意到的是,genomewideline_value只接受单个值,而不是接受范围值。如果我将它从一个范围滑块更改为一个下拉滑块,则更改是按照预期进行的。我已经在Colab环境中测试过jupyter_dash模块,所以请为您的环境修改它。
import pandas as pd
import dash
from dash.dependencies import Input, Output
import dash_bio as dashbio
from dash import html, dcc
#app = dash.Dash(__name__)
app = JupyterDash(__name__)
df = pd.read_csv('https://git.io/volcano_data1.csv')
#print(df)
app.layout = html.Div([
'Effect sizes',
dcc.RangeSlider(
id='default-volcanoplot-input',
min=-3,
max=3,
step=0.05,
marks={i: {'label': str(i)} for i in range(-3, 3)},
value=[-0.5, 1]
),
dcc.Dropdown(id='volcanpplot_dp',
options=[0,1,2,3,4,5,6,7,8],
value=4
),
html.Br(),
html.Div(
dcc.Graph(
id='dashbio-default-volcanoplot',
figure=dashbio.VolcanoPlot(
dataframe=df
)
)
)
])
@app.callback(
Output('dashbio-default-volcanoplot', 'figure'),
[
Input('default-volcanoplot-input', 'value'),
Input('volcanpplot_dp', 'value')
]
)
def update_volcanoplot(effects, effects2):
return dashbio.VolcanoPlot(
dataframe=df,
point_size=8,
genomewideline_value=effects2,
genomewideline_width=2,
effect_size_line=effects,
effect_size_line_width=2,
)
if __name__ == '__main__':
app.run_server(debug=True, mode='inline')

https://stackoverflow.com/questions/71555081
复制相似问题