python中饼图如何每张图都不一样然后循环播放_Python – Legend与饼图重叠

简短的回答是:您可以使用

plt.legend的参数loc,bbox_to_anchor以及bbox_transform和mode来将图例定位在轴或图形中.

长版:

第1步:确保需要图例.

在许多情况下,根本不需要图例,信息可以直接由上下文或颜色推断:

如果情节确实不能没有传说,请继续执行第2步.

第2步:确保需要一个饼图.

在许多情况下,饼图不是传达信息的最佳方式.

如果明确确定饼图的需要,让我们继续放置图例.

放置图例

plt.legend()有两个主要参数来确定图例的位置. loc参数最重要且本身就足够了.

例如. plt.legend(loc =“左上角”)放置图例,使其位于其边界框的左上角.如果未指定其他参数,则此边界框将是整个轴.

但是,我们可以使用bbox_to_anchor参数指定我们自己的边界框.如果给bbox_to_anchor一个2元组,例如bbox_to_anchor =(1,1)表示边界框位于轴的右上角,没有范围.然后它作为一个点,相对于图标将根据loc参数放置.然后它将扩展到零大小的边界框.例如.如果loc是“左上角”,则图例的左上角位于位置(1,1),图例将向右和向下扩展.

这个概念用于上面的情节,它告诉我们关于环球小姐选举偏见的令人震惊的事实.

import matplotlib.pyplot as plt

import matplotlib.patches

total = [100]

labels = ["Earth", "Mercury", "Venus", "Mars", "Jupiter", "Saturn",

"Uranus", "Neptune", "Pluto *"]

plt.title('Origin of Miss Universe since 1952')

plt.gca().axis("equal")

pie = plt.pie(total, startangle=90, colors=[plt.cm.Set3(0)],

wedgeprops = { 'linewidth': 2, "edgecolor" :"k" })

handles = []

for i, l in enumerate(labels):

handles.append(matplotlib.patches.Patch(color=plt.cm.Set3((i)/8.), label=l))

plt.legend(handles,labels, bbox_to_anchor=(0.85,1.025), loc="upper left")

plt.gcf().text(0.93,0.04,"* out of competition since 2006", ha="right")

plt.subplots_adjust(left=0.1, bottom=0.1, right=0.75)

为了使图例不超过图形,我们使用plt.subplots_adjust在图形边缘和轴之间获得更多空间,然后可以由图例占用.

还可以选择将4元组用于bbox_to_anchor.如何使用或解释这个问题在这个问题中有详细说明:What does a 4-element tuple argument for ‘bbox_to_anchor’ mean in matplotlib?

然后可以使用mode =“expand”参数使图例适合指定的边界框.

这种方法有一些有用的替代方案:

使用图形坐标

可以使用图形坐标来代替在轴坐标中指定图例位置.优点是,这将允许简单地将图例放置在图形的一个角落而不调整其余部分.为此,可以使用bbox_transform参数并为其提供图形转换.然后将给予bbox_to_anchor的坐标解释为图形坐标.

plt.legend(pie[0],labels, bbox_to_anchor=(1,0), loc="lower right",

bbox_transform=plt.gcf().transFigure)

这里(1,0)是图的右下角.由于轴和图形边缘之间的默认间距,这足以放置图例,使其不与饼图重叠.

在其他情况下,可能仍然需要调整这些间距,使得不会看到重叠,例如,

title = plt.title('What slows down my computer')

title.set_ha("left")

plt.gca().axis("equal")

pie = plt.pie(total, startangle=0)

labels=["Trojans", "Viruses", "Too many open tabs", "The anti-virus software"]

plt.legend(pie[0],labels, bbox_to_anchor=(1,0.5), loc="center right", fontsize=10,

bbox_transform=plt.gcf().transFigure)

plt.subplots_adjust(left=0.0, bottom=0.1, right=0.45)

使用bbox_inches =“tight”保存文件

现在可能存在这样的情况:我们对保存的图形比对屏幕上显示的图像更感兴趣.然后我们可以简单地将图例定位在图的边缘,就像这样

但然后使用bbox_inches =“tight”来保存它以保存图片,

plt.savefig("output.png", bbox_inches="tight")

这将创建一个更大的数字,紧紧围绕画布的内容:

使用子图

另一种方法是使用子图来为图例保留空间.在这种情况下,一个子图可以采用饼图,另一个子图可以包含图例.如下所示.

fig = plt.figure(4, figsize=(3,3))

ax = fig.add_subplot(211)

total = [4,3,2,81]

labels = ["tough working conditions", "high risk of accident",

"harsh weather", "it's not allowed to watch DVDs"]

ax.set_title('What people know about oil rigs')

ax.axis("equal")

pie = ax.pie(total, startangle=0)

ax2 = fig.add_subplot(212)

ax2.axis("off")

ax2.legend(pie[0],labels, loc="center")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值