我正在尝试使用绘图中的下拉菜单来过滤长格式的数据。然而,我可能会误解一些东西,因为我没有得到正确的结果。我想将其与分面结合起来,但这没有在下面的代码中显示。我尝试了两种不起作用的方法(它们以不同的方式失败),我不明白它们出了什么问题。
具体来说,您会注意到,当您更改下拉菜单选择时,以下信息不正确:数据点的颜色、悬停数据信息、图例和显示的数据。 (这取决于是否使用尝试 1 或尝试 2 代码)
这是我在 Iris 数据集上使用的代码(没有分面):
import pandas as pd
import plotly.express as px
df = px.data.iris()
dropdown_menu = [
{
'label': 'All Categories',
'method': 'update',
'args': [{
'visible': True
},
{'title': 'All Categories'}]}
]
dropdown_menu.extend(
[{'label': cat,
'method': 'update',
'args': [{
### Attempt 1
'visible': df['species'] == cat,
### Attempt 2
#'y': [df[df['species'] == cat]['petal_length']],
#'x': [df[df['species'] == cat]['petal_width']],
},
{'title': cat}]} for cat in df['species'].unique()]
)
fig = px.line(
df,
x='petal_width',
y='petal_length',
color='species',
line_group='species',
markers = True)#, facet_col='other categorical feature')
fig.update_layout(
{'updatemenus': [
{
'type': 'dropdown',
'buttons': dropdown_menu,
'direction': 'down',
'showactive': True,
'active': 0,
'x': 0.15,
'xanchor': 'left',
'y': 1.15,
'yanchor': 'top'
}
]}
)
附带问题:我第二次尝试时方括号的目的是什么?没有它们我会得到不同的结果。
这解决了使用跟踪和使用绘图图形对象而不是绘图表达的问题。我不确定是否有办法在不使用痕迹的情况下做到这一点。
import plotly.graph_objects as go
import pandas as pd
# Load dataset
df = px.data.iris()
# Initialize figure
fig = go.Figure()
# Add Traces
for cat in df['species'].unique():
fig.add_trace(
go.Scatter(x=list(df[df['species'] == cat]['petal_width']),
y=list(df[df['species'] == cat]['petal_length']),
# color=[df[df['species'] == cat]['species']],
# line_group=[df[df['species'] == cat]['species']],
visible=True,
name=cat,
mode='markers'
)
)
dropdown_menu = [
{
'label': 'All Categories',
'method': 'update',
'args': [{
'visible': [True for cat_opt in df['species'].unique()],
},
{'title': 'All Categories'}]}
]
dropdown_menu.extend(
[{'label': cat,
'method': 'update',
'args': [{
'visible': [cat_opt == cat for cat_opt in df['species'].unique()]
},
{'title': cat}]} for cat in df['species'].unique()]
)
fig.update_layout(
{'updatemenus': [
{
'type': 'dropdown',
'buttons': dropdown_menu,
'direction': 'down',
'showactive': True,
'active': 0,
'x': 0.15,
'xanchor': 'left',
'y': 1.2,
'yanchor': 'top'
}
]}
)
fig.show()