【问题标题】:Plotly pie graph not showing all data绘制饼图不显示所有数据
【发布时间】:2021-11-28 03:13:11
【问题描述】:

我注意到我的 go.Pie 图表仅显示数据框列中保存的 3 个值中的 2 个。我在创建引用数据框中完全相同的列的 px.treemap 时注意到了这一点,它显示了所有 3 个值。

下面是我的饼图代码,然后是树形图

#docCategory count pie graph
valuesDocCat = df['docCategory'].value_counts()
figDocCat = go.Figure(data=[go.Pie(labels = df['docCategory'], values = valuesDocCat)])
figDocCat.update_traces(textposition = 'inside')
figDocCat.update_layout(uniformtext_minsize=14, uniformtext_mode='hide', title='Document Category breakdown')

#treeMap test graph
valuesTreemap = df['Kind'].value_counts()
figTreemap = px.treemap(df, path = ['docCategory', 'Kind'], color='docCategory')
figTreemap.update_traces(root_color='lightgrey')
figTreemap.update_layout(margin = dict(t=50, l=25, r=25, b=25)

您可以看到我上面的代码在这两种情况下都引用了df['docCategory'],但正如您在下面的图片中看到的,饼图没有“未知”字段,而树形图有。

关于为什么的任何想法?我有其他饼图引用了超过 2 个字段并且没有问题,它只是发生在这个上。

【问题讨论】:

    标签: python graph plotly plotly-dash


    【解决方案1】:
    • 您的问题“绘制饼图未显示所有数据”,它显示了所有内容。
    • figDocCat = go.Figure(data=[go.Pie(labels = df['docCategory'], values = valuesDocCat)])
      • 您正在为labelsvalues 传递不同长度的数组。 plotly 从标签中提取前 3 个项目,其中一些是相同的。
      • 为了保持一致,这条线将是figDocCat = go.Figure(data=[go.Pie(labels=valuesDocCat.index, values=valuesDocCat)])。即标签和值都来自同一个 pandas 系列
    • 有模拟数据框来演示

    完整解决方案

    import plotly.graph_objects as go
    import plotly.express as px
    import pandas as pd
    import numpy as np
    
    cats = {
        "Structured": ["Spreadsheet"],
        "Unknown": ["System File", "Unrecognised"],
        "Unstrcutured": ["Document", "Email", "Image", "Calendar Entry"],
    }
    
    df = pd.DataFrame(
        [
            {"docCategory": c, "Kind": np.random.choice(cats[c], 2)[0]}
            for c in np.random.choice(list(cats.keys()), 25)
        ]
    )
    # docCategory count pie graph
    valuesDocCat = df["docCategory"].value_counts()
    figDocCat = go.Figure(data=[go.Pie(labels=valuesDocCat.index, values=valuesDocCat)])
    figDocCat.update_traces(textposition="inside")
    figDocCat.update_layout(
        uniformtext_minsize=14, uniformtext_mode="hide", title="Document Category breakdown"
    )
    figDocCat.show()
    
    # treeMap test graph
    valuesTreemap = df["Kind"].value_counts()
    figTreemap = px.treemap(df, path=["docCategory", "Kind"], color="docCategory")
    figTreemap.update_traces(root_color="lightgrey")
    figTreemap.update_layout(margin=dict(t=50, l=25, r=25, b=25))
    

    【讨论】:

    • 非常感谢 Rob 的款待。我想这只是我对可以使用的前缀缺乏了解。 .index 是一个很好的了解,它可能会清理我代码的其他部分以用于其他事情:) 再次感谢您提供如此详细的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    相关资源
    最近更新 更多