Python matplotlib饼图中缺少标签

Python matplotlib饼图中缺少标签,python,matplotlib,plot,Python,Matplotlib,Plot,我尝试在Ubuntu18.10上使用Python3 Matplotlib v2.2.2-4build1绘制饼图。除了标签,一切似乎都很好——它们不见了。尝试根据官方文档添加它(),尝试使用web上的示例()-结果相同,没有标签 以下是我的代码的简化版本: import numpy as np import matplotlib.pyplot as plt import sys headers = ['a', 'b', 'c', 'd', 'e'] values = [5, 4, 3, 2, 1

我尝试在Ubuntu18.10上使用Python3 Matplotlib v2.2.2-4build1绘制饼图。除了标签,一切似乎都很好——它们不见了。尝试根据官方文档添加它(),尝试使用web上的示例()-结果相同,没有标签

以下是我的代码的简化版本:

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()
以下是我看到的-无标签:

尝试使用元组而不是列表-同样的事情

有人能帮我吗?

在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()
在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()


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

同时,使用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()

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

同时,使用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()

谢谢回复,但我不需要图例,我需要标签,这是另一回事。参见示例,没有图例,[“Java”、“Ruby”、“C++”、“Python”]是MatplotLib的标签。谢谢您的回复,但我不需要图例,我需要标签,这是另一回事。例如,这里没有图例,[“Java”、“Ruby”、“C++”、“Python”]是MatplotLib的标签该死,这么简单:)非常感谢。该死,这么简单:)非常感谢。