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

时间:2017-10-02 14:43:38

标签: python pandas matplotlib

this question类似,我使用subplots中的matplotlib关键字,除了我正在绘制饼图和使用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')

First pie example

我可以通过the docs做并添加一个明确的figsize来缓解这种情况,但它看起来仍然非常狭窄:

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

Second pie example

有没有一种更好的方法可以做得更好。可能与tight_layout有关吗?​​

2 个答案:

答案 0 :(得分:3)

我认为你需要在y轴上填充标签,所以使用标签,即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

答案 1 :(得分:3)

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

set_label_coords的两个输入是标签的xy坐标,位于Axes分数坐标中。

对于你的情节,我发现(-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