从饼图中删除标签会移动图例框

Kha*_*775 3 python matplotlib pandas

我正在尝试制作饼图,并从中删除标签。目前,我正在这样做:

qx = queens_tree_types.plot(ax=axes[0], kind='pie', figsize=(8,30), legend=True, 
                            autopct='%1.0f%%', pctdistance=0.9, radius=1.2)
axes[0].set_title('Queens');
Run Code Online (Sandbox Code Playgroud)

这给了我以下派:

在此处输入图片说明

很好,但我想从图表中删除标签。当我尝试并简单地做时labels=None,我得到这张照片:

在此处输入图片说明

初始饼图的图例位置设置如下:

qx.legend(bbox_to_anchor=(2.5, 1.05),
      ncol=2, fancybox=True, shadow=True)
Run Code Online (Sandbox Code Playgroud)

但是,当我删除标签时,我似乎根本无法移动图例框。是什么赋予了?

Par*_*ait 5

考虑将图例放置在饼图附近,因为默认图例放置在同一图上的饼图上。下面以虚拟数据演示:

数据

import pandas as pd
import numpy as np

df = pd.melt(pd.DataFrame(np.random.randint(0,10,size=(20, 10)), 
                          columns=['Hulkeberry Finn', 'Captain Ahab', 'Hester Prynne', 
                                   'Nick Carraway', 'Bigger Thomas', 'Scout Finch', 
                                   'Invisible Man', 'Denver',
                                   'Tom Joad', 'Edna Pontellier']),
             var_name='group')
df = df.groupby(['group']).sum()
Run Code Online (Sandbox Code Playgroud)

饼图1 (带有默认图例覆盖)

from matplotlib import rc, pyplot as plt

# GENERAL STYLE SETTINGS
font = {'family' : 'arial', 'weight': 'bold', 'size': 10}
rc('font', **font); rc("figure", facecolor="white"); rc('axes', edgecolor='darkgray')

# GRAPH WITH LEGEND
qx = df.plot(kind='pie', figsize=(8,8), y='value', labels=None,
             autopct='%1.0f%%', pctdistance=0.9, radius=1.2)
plt.legend(loc="center right", fontsize=10)

plt.title('Pie Chart Demonstration', weight='bold', size=14)

plt.show()
plt.clf()
plt.close()
Run Code Online (Sandbox Code Playgroud)

饼图覆盖图例输出

饼图2 (带有相邻子图)

plt.gca().axis("equal")
pie = plt.pie(df, startangle=0, autopct='%1.0f%%', pctdistance=0.9, radius=1.2)
labels=df.index.unique()
plt.title('Pie Chart Demonstration', weight='bold', size=14)
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.85)

plt.show()
plt.clf()
plt.close()
Run Code Online (Sandbox Code Playgroud)

饼图子图图例输出