matplotlib饼图中缺少标签

时间:2019-03-06 09:46:03

标签: python matplotlib plot

我尝试在Ubuntu 18.10上使用Python 3 Matplotlib v2.2.2-4build1绘制饼图。除了标签外,其他一切似乎都还不错-它们不见了。试图根据官方文档(https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html)添加它,并尝试使用网络上的示例(https://pythonspot.com/matplotlib-pie-chart/)-结果相同,没有标签。

这是我的代码的简化版本:

import numpy as np
import matplotlib.pyplot as plt
import sys

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
sum = sum(values)
labels = []
for v in values:
    labels.append('{:.1f}%'.format(100 * v / sum))
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(values, labels=labels, textprops=dict(color="w"))
plt.show()

这是我看到的-没有标签:

Pie chart with no labels

试图使用元组而不是列表-一样。

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

您可能希望将标签的颜色在白色背景上设为非白色:)

还使用sum作为变量名会覆盖该函数,因此最好选择其他方法。

import numpy as np
import matplotlib.pyplot as plt
import sys

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
sumT = sum(values)
labels = []
for v in values:
    labels.append('{:.1f}%'.format(100 * v / sumT))
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(values, labels=labels, textprops=dict(color="k"))
plt.show()

或者如果您希望标签位于其中:

import numpy as np
import matplotlib.pyplot as plt
import sys

def func(pct, allvals):
    absolute = int(pct/100.*sum(allvals))
    return "{:.1f}%)".format(pct)

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
sumT = sum(values)
labels = []
for v in values:
    labels.append('{:.1f}%'.format(100 * v / sumT))
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(values, autopct=lambda pct: func(pct, 
values), textprops=dict(color="w"))
plt.show()

答案 1 :(得分:1)

import numpy as np
import matplotlib.pyplot as plt
import sys

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
colors=['yellow','blue','red','pink','green']

plt.pie(values,labels=headers,
        colors=colors,autopct='%1.2f%%',
        shadow=True,startangle=90)
plt.title('pie chart')
plt.show()

Output

答案 2 :(得分:0)

在plt.show()之前添加plt.legend()语句即可完成工作。

import numpy as np
import matplotlib.pyplot as plt
import sys

headers = ['a', 'b', 'c', 'd', 'e']
values = [5, 4, 3, 2, 1]
labels = []
for v in values:
    labels.append('{:.1f}%'.format(100 * v / sum))
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(values, labels=labels, textprops=dict(color="w"))
plt.legend()
plt.show()