【问题标题】:python matplotlib pie chart unexpected valuespython matplotlib饼图意外值
【发布时间】:2021-04-16 20:45:50
【问题描述】:

我正在学习使用 matplotlib 可视化,并且正在做一个简单的饼图。我想知道为什么当我绘制这个时,百分比如下:

我原以为它会显示 40% 的青蛙和 50% 的猪...

我需要标准化吗?

labels = 'Frogs', 'Hogs'

sizes = [40,50]
#explode = (0, 0.1, 0, 0)  # only "explode" the 2nd slice (i.e. 'Hogs')

fig1, ax1 = plt.subplots()
ax1.pie(sizes,labels=labels, autopct='%1.1f%%')
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

plt.show()

【问题讨论】:

  • 40/90 = 44.4%.... 50/90 = 55.6%

标签: python matplotlib data-visualization pie-chart


【解决方案1】:

正如 BigBen 在他的评论中指出的那样,饼图使用 100% 的总数。您的 50 和 40 的值加起来不等于 100,因此它将它们作为总数,而不是百分比,因此假设青蛙和猪的总数为 90,而不是 100。

【讨论】:

    【解决方案2】:

    pie有一个参数normalize

    normalizeNone 或布尔值,默认:None

    True 时,总是通过标准化x 来制作一个完整的馅饼,这样sum(x) == 1。如果sum(x) <= 1False 制作一个部分饼图,并为sum(x) > 1 引发ValueError。

    None 时,默认为True 如果sum(x) >= 1False 如果sum(x) < 1

    以后默认总是True,所以False需要显式设置。

    要得到一些百分比,可以将这些值除以100,然后绘制一个部分饼图:

    import matplotlib.pyplot as plt
    
    fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(6, 2))
    
    labels = ['Frogs', 'Hogs']
    sizes = [40, 50]
    ax1.pie([s / 100 for s in sizes], normalize=False, labels=labels, autopct='%1.1f%%')
    ax1.axis('equal')
    ax1.set_title('40% frogs, 50% hogs')
    
    ax2.pie([0.15], normalize=False, labels=['Frogs'], autopct='%1.0f%%')
    ax2.axis('equal')
    ax2.set_title('15% frogs')
    
    plt.tight_layout()
    plt.show()
    

    【讨论】:

    • 如果这回答了您的问题,您可以考虑投票和/或marking 将答案视为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2020-08-21
    • 1970-01-01
    • 2011-03-27
    相关资源
    最近更新 更多