【问题标题】:Plotly.express, pandas and NaNsPlotly.express、熊猫和 NaN
【发布时间】:2021-12-15 19:26:21
【问题描述】:

根据下面的代码,我想以绘图方式可视化我的数据。但是,我创建的饼图也显示了 Null,我想省略它。

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd

df = pd.DataFrame([
        ['January', 'Violin'],
        ['February', 'Piano'], 
        ['March', 'Violin'],
        ['February', 'Violin'],
        ['January', 'Piano'],
        ['January', 'Violin']], 
    columns=['Month', 'Instrument']
)

df = df.pivot(columns='Month', values='Instrument')

app = dash.Dash(__name__)

app.layout = html.Div([
    html.P("Select a month:"),
    dcc.Dropdown(
        id='my_dropdown',
        value = 'January',
        options=[
                  {'label': 'January', 'value': 'January'},
                  {'label': 'February', 'value': 'February'},
                  {'label': 'March', 'value': 'March'}
        ],
        clearable=False,
        style={"width": "50%"}
    ),
    dcc.Graph(id="pie-chart"),
])

@app.callback(
    Output("pie-chart", "figure"),
    [Input("my_dropdown", "value")])
def generate_chart(my_dropdown):
    fig = px.pie(df, names=my_dropdown)
    return fig

app.run_server(debug=True)

在这种情况下,我应该将某些内容更改为代码的情节部分,还是应该以不同的方式转换我的初始 DataFrame(而不是使用 df.pivot() 选项)?

【问题讨论】:

    标签: pandas plotly pie-chart


    【解决方案1】:

    看起来你想要的是每个仪器实例数的计数,所以我认为你不需要旋转你的 DataFrame。你可以保持原样:

    df
          Month Instrument
    0   January     Violin
    1  February      Piano
    2     March     Violin
    3  February     Violin
    4   January      Piano
    5   January     Violin
    

    如果您将参数names='Instrument' 传递给px.pie,它将通过计算Instrument 列中唯一值的出现次数来创建饼图,您不必担心出现空值。然后,您可以按用户在 generate_chart 函数中以破折号选择的月份对 DataFrame 进行子集化。

    import dash
    import dash_core_components as dcc
    import dash_html_components as html
    from dash.dependencies import Input, Output
    import plotly.express as px
    import pandas as pd
    
    df = pd.DataFrame([
            ['January', 'Violin'],
            ['February', 'Piano'], 
            ['March', 'Violin'],
            ['February', 'Violin'],
            ['January', 'Piano'],
            ['January', 'Violin']], 
        columns=['Month', 'Instrument']
    )
    
    # df = df.pivot(columns='Month', values='Instrument')
    
    app = dash.Dash(__name__)
    
    app.layout = html.Div([
        html.P("Select a month:"),
        dcc.Dropdown(
            id='my_dropdown',
            value = 'January',
            options=[
                      {'label': 'January', 'value': 'January'},
                      {'label': 'February', 'value': 'February'},
                      {'label': 'March', 'value': 'March'}
            ],
            clearable=False,
            style={"width": "50%"}
        ),
        dcc.Graph(id="pie-chart"),
    ])
    
    @app.callback(
        Output("pie-chart", "figure"),
        [Input("my_dropdown", "value")])
    def generate_chart(my_dropdown):
        fig = px.pie(
            df[df['Month'] == my_dropdown], 
            names='Instrument'
        )
        # fig = px.pie(df, names=my_dropdown)
        return fig
    
    app.run_server(debug=True)
    

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 2016-08-27
      • 2014-01-29
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2018-03-27
      相关资源
      最近更新 更多