绘制多个圆环图
Drawing multiple donut charts
我正在编写代码来输出 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()
因为fig.gca()
持有图中最后创建的轴,所以白色圆圈被放置在那里三次独立于循环变量。
您可以使用 ax
变量
在每次迭代中简单地将圆形艺术家添加到轴上
ax.add_artist(centre_circle)
然而,你的方法对我来说似乎是一个不必要的解决方法,因为你可以通过使用 wedgeprops
kwarg 及其 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')
请注意,您甚至不必遍历列,而是可以直接从 pandas 数据框创建饼图:
df.plot(kind='pie', subplots=True, wedgeprops=dict(width=.3), legend=False, labels=None)
结果:
我正在编写代码来输出 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()
因为fig.gca()
持有图中最后创建的轴,所以白色圆圈被放置在那里三次独立于循环变量。
您可以使用 ax
变量
ax.add_artist(centre_circle)
然而,你的方法对我来说似乎是一个不必要的解决方法,因为你可以通过使用 wedgeprops
kwarg 及其 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')
请注意,您甚至不必遍历列,而是可以直接从 pandas 数据框创建饼图:
df.plot(kind='pie', subplots=True, wedgeprops=dict(width=.3), legend=False, labels=None)
结果: