熊猫饼图子图标签与切片标签重叠

Lon*_*Rob 4 python matplotlib pandas

这个问题类似,我使用subplots关键字 inmatplotlib除了我正在绘制饼图和使用熊猫。

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')
Run Code Online (Sandbox Code Playgroud)

第一个饼图示例

我可以通过像文档那样做并添加一个明确的来缓解这种情况figsize,但它看起来仍然很局促:

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

第二个饼图示例

有没有更好的方法可以做得更好。tight_layout可能跟什么有关?

Flo*_*oor 5

我认为您需要在 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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


tmd*_*son 5

您可以使用 将标签向左移动ax.yaxis.set_label_coords(),然后将坐标调整为适合您的值。

两个输入set_label_coords是标签的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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明