绘制多个甜甜圈图表

2024-06-25 22:32:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个代码来输出3个油炸圈饼图表。我先画3个饼图,然后我想用一个白色的圆圈填充每个饼图。你知道吗

我成功地输出了3个饼图,但白色的圆圈只出现在最后一个。你知道吗

我如何使它出现在所有三个?你知道吗

fig, axes = plt.subplots(1,3, figsize=(10,5))
for ax, col in zip(axes, df.columns):
    ax.pie(df[col], labels=None,  colors=colors)
    ax.set(ylabel='', title=col, aspect='equal')
    centre_circle = plt.Circle((0,0),0.70,fc='white')
    fig = plt.gcf()
    fig.gca().add_artist(centre_circle)

axes[0].legend(labels, bbox_to_anchor=(0, 0.5))



fig.savefig('your_file.png')
plt.show()

Sample output


Tags: 代码dflabelsfigpltcolaxcolors
1条回答
网友
1楼 · 发布于 2024-06-25 22:32:15

因为fig.gca()保存了图中最后创建的轴,所以白圈被放置在那里三次,与循环变量无关。
您只需使用ax变量在每次迭代中将圆艺术家添加到轴

ax.add_artist(centre_circle)

但是,您的方法对我来说似乎是一个不必要的解决方法,因为您可以通过使用wedgepropskwarg及其width参数来完成油炸圈饼形状(有关更多信息,请参见here):

试试看

ax.pie(df[col], labels=None, colors=colors, wedgeprops=dict(width=.3))

而不是在每次创建饼图后手动绘制白色圆。你知道吗


完整示例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)
df = pd.DataFrame(np.random.randint(5, 10, (7, 3)), columns=['a', 'b', 'c'])

fig, axes = plt.subplots(1,3, figsize=(10,5))
for ax, col in zip(axes, df.columns):
    ax.pie(df[col], wedgeprops=dict(width=.3))
    ax.set(ylabel='', title=col, aspect='equal')

enter image description here


请注意,您甚至不必在列上循环,但可以直接从数据框创建饼图:

df.plot(kind='pie', subplots=True, wedgeprops=dict(width=.3), legend=False, labels=None)

结果:

enter image description here

相关问题 更多 >