Pandas饼图子图标签与切片标签重叠

4
这个问题类似,我正在使用matplotlib中的subplots关键字来绘制饼图,并使用pandas。
当标签接近水平时,我的subplots上的标签会与切片标签重叠。
first = pd.Series({'True':2316, 'False': 64})
second = pd.Series({'True':2351, 'False': 29})
df = pd.concat([first, second], axis=1, keys=['First pie', 'Second pie'])
axes = df.plot(kind='pie', subplots=True)
for ax in axes:
    ax.set_aspect('equal')

第一个饼图示例

我可以像文档中所做的那样添加显式的figsize来缓解这个问题,但它仍然看起来相当拥挤:

axes = df.plot(kind='pie', figsize=[10, 4], subplots=True)
for ax in axes:
    ax.set_aspect('equal')

第二个饼图示例

有没有更好的方法呢?或许可以使用 tight_layout

2个回答

6

我认为你需要在y轴标签上添加填充,所以使用labelpad即ax.yaxis.labelpad = 20

axes = df.plot(kind='pie', figsize=[10, 4], subplots=True)
for ax in axes:
    ax.set_aspect('equal')
    ax.yaxis.labelpad = 20

enter image description here


5
您可以使用ax.yaxis.set_label_coords()将标签移动到左侧,然后调整坐标以适合您的需要。 set_label_coords的两个输入是标签在Axes分数坐标系中的xy坐标。
对于您的图,我发现(-0.15, 0.5)效果很好(即x=-0.15表示轴宽度的15%在轴的左侧,y=0.5表示轴的一半高度)。因此,通常情况下,假设您始终希望标签居中于y轴,则只需调整x坐标。
我还使用subplots_adjust(wspace=0.5)添加了一些间距,以使轴标签不会与其他饼图的False标签重叠。
import pandas as pd
import matplotlib.pyplot as plt

first = pd.Series({'True':2316, 'False': 64})
second = pd.Series({'True':2351, 'False': 29})
df = pd.concat([first, second], axis=1, keys=['First pie', 'Second pie'])
axes = df.plot(kind='pie', subplots=True)
for ax in axes:
    ax.set_aspect('equal')
    ax.yaxis.set_label_coords(-0.15, 0.5)

plt.subplots_adjust(wspace=0.5)

plt.show()

enter image description here


这个答案让馅饼看起来很棒!但我选择了这个答案作为最终选择,尽管结果的馅饼不太漂亮,但因为使用labelpadset_label_coords需要更少的特定情况实验。 - LondonRob
好的,无论你用什么方法都可以。很高兴你现在对你的图表感到满意。不过,我不确定我理解你关于实验的观点...我的意思是,你只是为两种情况改变一个数字,对吧? - tmdavison
你不需要在 set_label_coords 中使用两个参数来进行实验吗?而在 labelpad 中只需要使用一个参数即可。 - LondonRob
好的,你可以将y坐标保留在0.5,假设你希望它位于图表的中间位置。只有x坐标是你关心的,但我猜这样做会给你增加灵活性,如果你确实想要移动标签的位置。 - tmdavison
啊!我没意识到发生了什么。可能值得更新答案以显示 0.5 不是自定义部分。 - LondonRob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接