使用此示例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()
答案 0 :(得分:14)
我检查了你的代码,plt.legend()
创建了一个传奇,就像你想要的那样;也许设置loc="lower left"
,所以它不会与相关的馅饼重叠。
对我来说,除了非标准字符外,字符串也能正确显示 - 这可能会导致它们根本不显示给你的问题。只有最大的切片和“Otros”不包含特殊的字符。也许还会尝试调整图形大小,因为它们可能会被推出画布。请参阅how to write accents with 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()
答案 1 :(得分:1)
您可以按照以下类型更改图例-
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()