当前位置: 首页 > 知识库问答 >
问题:

Matplotlib:在轴外绘制两个图例会使其被图形框截断

陈琪
2023-03-14

绘制一个圆环图,轴外有两个图例(第一个图例-在图形右侧,第二个-在底部)。

通过考虑两个图例的尺寸,对图形进行紧凑布局。

import matplotlib.pyplot as plt
from pylab import *

ioff() # don't show figures 

colors = [(102, 194, 165), (252, 141, 98), (141, 160, 203), (231, 138,195),  
          (166, 216, 84), (255, 217, 47), (171, 197, 233), (252, 205, 229)]

for icol in range(len(colors)):
    red,green,blue = colors[icol]
    colors[icol] = (red / 255., green / 255., blue / 255.)

fig = plt.figure(1, figsize=(8, 8))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])

sizes_component_1 = [12, 23, 100, 46]
sizes_component_2 = [15, 30, 45, 10, 44, 45, 50, 70]

component_1 = 'exampleofalongtextthatiscutoff', '2', '3', '4'
component_2 = 'Unix', 'Mac', 'Windows7', 'Windows10', 'WindowsXP', 'Linux', 'FreeBSD', 'Android'

patches1, texts1, autotexts1 = ax.pie(sizes_component_1, radius=1, pctdistance=0.9, colors=colors, autopct='%1.1f%%', shadow=False, startangle=90)
patches2, texts2, autotexts2 = ax.pie(sizes_component_2, radius=0.8, pctdistance=0.6, colors=colors, autopct='%1.1f%%', shadow=False, startangle=90)

# To draw circular donuts
ax.axis('equal')

# Draw white circle
centre_circle = plt.Circle((0,0),0.6,color='black', fc='white')         
ax.add_artist(centre_circle)

# Shrink current axis by 20%
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])

lgd1=ax.legend(patches1,component_1, frameon=False, loc='center left', bbox_to_anchor=(1.0, 0.8), borderaxespad=0.1)
lgd2=ax.legend(patches2,component_2, frameon=False, loc='center left', ncol=len(patches2)/2, bbox_to_anchor=(0.0, -0.005), borderaxespad=0)

ax_elem = ax.add_artist(lgd1)

fig.suptitle('Title', fontsize=16)
fig.savefig('donut.png',bbox_extra_artists=(lgd1,lgd2,), bbox_inches='tight')
plt.gcf().clear() # clears buffer

共有1个答案

艾泰
2023-03-14

本期附饼图:https://github.com/matplotlib/matplotlib/issues/4251

而且它不是固定的。

 类似资料:
  • 我熟悉以下问题: Matplotlib savefig,在绘图外带有图例 如何把传说从情节中剔除 这些问题的答案似乎有一种奢侈,能够摆弄轴的精确收缩,以便传说符合。 然而,缩小轴并不是一个理想的解决方案,因为它使数据更小,实际上更难解释;特别是当它很复杂而且有很多事情发生的时候。。。因此需要一个大的传说 文档中复杂图例的示例说明了这一点的必要性,因为其绘图中的图例实际上完全掩盖了多个数据点。 ht

  • 我有一个简单的代码,它在两个不同的图(图1和图2)中绘制了完全相同的东西。然而,我必须写一行ax?。绘制(x,y)两次,一次用于ax1,一次用于ax2。我怎么可能只有一个plot表达式(对于我更复杂的代码来说,有多个redondant表达式可能是一个麻烦的来源)。类似于ax1、ax2。绘图(x,y)?

  • 问题内容: 在Matplotlib中,我按如下所示制作虚线网格: 但是,我无法找出如何(甚至可能)在其他图形元素(如条形图)后面绘制网格线。更改添加网格的顺序与添加其他元素的顺序没有区别。 是否有可能使网格线出现在其他所有内容的后面? 问题答案: 据此-http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder- td5346.

  • 问题内容: 有没有办法直接使用字典中的数据来绘制条形图? 我的字典看起来像这样: 我期待 工作,但事实并非如此。 这是错误: 问题答案: 您可以通过首先绘制条形图然后设置适当的刻度来分两行进行: 请注意,倒数第二行应在python3中读取,因为它会返回一个生成器,而matplotlib无法直接使用该生成器。

  • 主要内容:1 Swing绘制图形的介绍,2 Swing绘制图形的方法,3 Swing绘制图形的案例1 Swing绘制图形的介绍 java.awt.Graphics类提供了许多用于图形编程的方法。 2 Swing绘制图形的方法 方法 描述 public abstract void drawString(String str, int x, int y) 用于绘制指定的字符串。 public void drawRect(int x, int y, int width, int height) 绘制

  • 我正在绘图中绘制多个多边形: 结果图正确地显示了我的多边形,但我想知道哪个多边形对应于图上的哪个索引(例如:绿色多边形是处的多边形)。理想情况下,我想要一个将多边形的颜色与其索引关联起来的图例,但我不知道如何在这样的循环中添加这样的图例。我试过但这不起作用。 多边形的数量是可变的,所以严格分配颜色是不可能的。 如何添加图例?