17

使用这个例子http://matplotlib.org/examples/pie_and_polar_charts/pie_demo_features.html 我怎么能在这个饼图中添加一个图例?我的问题是我有一个大切片 88.4%,第二大切片是 10.6%,其他切片是 0.7 和 0.3%。饼图周围的标签不会出现(最大切片除外),较小切片的百分比值也不会出现。所以我想我可以添加一个显示名称和值的图例。但是我还没发现怎么...

# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
# The slices will be ordered and plotted counter-clockwise.
labels = 'Rayos X', 'RMN en solución', 'Microscopía electrónica', 'Otros'
sizes = [88.4, 10.6, 0.7, 0.3]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0.1, 0, 0, 0)
plt.pie(sizes, explode=explode, labels=labels, colors=colors, shadow=True, startangle=90)
plt.legend(title="técnica")
# Set aspect ratio to be equal so that pie is drawn as a circle.
plt.axis('equal')
plt.show()
4

2 回答 2

30

我检查了您的代码,并plt.legend()创建了一个图例,正是您想要的样子;也许设置loc="lower left",所以它不会与相关的饼图重叠。

对我来说,字符串显示正确,除了非标准字符 - 这可能会导致它们根本不显示给你的问题。只有最大的切片和“Otros”不包含特殊字符。也许也尝试调整图形的大小,因为它们可能会被推出画布。请参阅如何使用 matplotlib 编写重音符号并使用正确的字符串重试。

未显示百分比,因为您没有将它们设置为显示。请参考您发布的示例,因为您省略autopct='%1.1f%%'了将绘制百分比的示例。在这种特殊情况下,我宁愿不绘制百分比,因为它们会像边框上的标签一样重叠,因为有些切片太小了。也许将这些信息添加到图例中。

把它们放在一起(除了特殊字符 - 我在激活 TeX 时遇到了一些问题),试试下面的代码:

# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
# The slices will be ordered and plotted counter-clockwise.
labels = [r'Rayos X (88.4 %)', r'RMN en solucion (10.6 %)', 
r'Microscopia electronica (0.7 %)', r'Otros (0.3 %)']
sizes = [88.4, 10.6, 0.7, 0.3]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
patches, texts = plt.pie(sizes, colors=colors, startangle=90)
plt.legend(patches, labels, loc="best")
# Set aspect ratio to be equal so that pie is drawn as a circle.
plt.axis('equal')
plt.tight_layout()
plt.show()

结果饼图

于 2013-11-08T11:40:31.897 回答
2

您可以更改以下类型的图例-

best
upper right
upper left
lower left
lower right
right
center left
center right
lower center
upper center
center

state = stateData['State/UnionTerritory']
cases = stateData['ConfirmedIndianNational']
explode = stateData.ConfirmedIndianNational.apply(lambda x:x > 100)
explode = explode.apply(lambda x:0.2 if x == True else 0)
plt.title("Covid 19")
plt.pie(cases, explode=explode,autopct='%1.2f%%',shadow=True, radius=3)
plt.legend(state, loc="center")
plt.show()

在此处输入图像描述

于 2020-03-29T15:57:03.847 回答