使用带有plotly的下拉菜单过滤长格式的数据

问题描述 投票:0回答:1

我正在尝试使用绘图中的下拉菜单来过滤长格式的数据。然而,我可能会误解一些东西,因为我没有得到正确的结果。我想将其与分面结合起来,但这没有在下面的代码中显示。我尝试了两种不起作用的方法(它们以不同的方式失败),我不明白它们出了什么问题。

具体来说,您会注意到,当您更改下拉菜单选择时,以下信息不正确:数据点的颜色、悬停数据信息、图例和显示的数据。 (这取决于是否使用尝试 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'
        }
   ]}
)
 

附带问题:我第二次尝试时方括号的目的是什么?没有它们我会得到不同的结果。

python plotly plotly-python
1个回答
0
投票

这解决了使用跟踪和使用绘图图形对象而不是绘图表达的问题。我不确定是否有办法在不使用痕迹的情况下做到这一点。

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()
© www.soinside.com 2019 - 2024. All rights reserved.