来自数据框的嵌套饼图
Nested pie chart from dataframe
我有一个像这样的数据框 df:
product count Class
stuff 3 A
thing 7 A
another 1 B
我可以用我的代码制作 2 个不同的饼图:
my_data = df['count']
my_labels = df['Product']
plt.pie(my_data,labels=my_labels,autopct='%1.1f%%')
plt.title('Distribution 1')
plt.axis('equal')
plt.show()
my_data = df['count']
my_labels = df['Class']
plt.pie(my_data,labels=my_labels,autopct='%1.1f%%')
plt.title('Distribution 2')
plt.axis('equal')
plt.show()
但我想做一个可以结合两者的嵌套饼图:
当我检查时 https://matplotlib.org/3.1.1/gallery/pie_and_polar_charts/nested_pie.html
我不明白如何不使用静态值来做到这一点。
与教程类似,您可能需要稍微修改一下:
大小 = 0.3
fig, ax = plt.subplots()
ax.pie(df.groupby('Class')['count'].sum(), radius=1,
wedgeprops=dict(width=size, edgecolor='w'))
ax.pie(df['count'], radius=1-size,
wedgeprops=dict(width=size, edgecolor='w'))
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
输出:
我会根据您分享的 link 更仔细地编写您的代码。只需将示例中的数组替换为您的列即可。您可能需要对标签进行一些额外的格式化,但也许它对您的实际数据没问题:
import matplotlib.pyplot as plt
df = d1.copy()
fig, ax = plt.subplots()
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
ax.pie(df.groupby('Class', sort=False)['count'].sum(), radius=1, colors=outer_colors, labels=df['Class'].drop_duplicates(), autopct='%1.1f%%',
wedgeprops=dict(width=size, edgecolor='w'))
ax.pie(df['count'], radius=1-size, colors=inner_colors, labels=df['product'], autopct='%1.1f%%',
wedgeprops=dict(width=size, edgecolor='w'))
ax.set(aspect="equal", title='Distribution 1 and 2')
plt.show()
我有一个像这样的数据框 df:
product count Class
stuff 3 A
thing 7 A
another 1 B
我可以用我的代码制作 2 个不同的饼图:
my_data = df['count']
my_labels = df['Product']
plt.pie(my_data,labels=my_labels,autopct='%1.1f%%')
plt.title('Distribution 1')
plt.axis('equal')
plt.show()
my_data = df['count']
my_labels = df['Class']
plt.pie(my_data,labels=my_labels,autopct='%1.1f%%')
plt.title('Distribution 2')
plt.axis('equal')
plt.show()
但我想做一个可以结合两者的嵌套饼图:
当我检查时 https://matplotlib.org/3.1.1/gallery/pie_and_polar_charts/nested_pie.html 我不明白如何不使用静态值来做到这一点。
与教程类似,您可能需要稍微修改一下:
大小 = 0.3
fig, ax = plt.subplots()
ax.pie(df.groupby('Class')['count'].sum(), radius=1,
wedgeprops=dict(width=size, edgecolor='w'))
ax.pie(df['count'], radius=1-size,
wedgeprops=dict(width=size, edgecolor='w'))
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
输出:
我会根据您分享的 link 更仔细地编写您的代码。只需将示例中的数组替换为您的列即可。您可能需要对标签进行一些额外的格式化,但也许它对您的实际数据没问题:
import matplotlib.pyplot as plt
df = d1.copy()
fig, ax = plt.subplots()
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
ax.pie(df.groupby('Class', sort=False)['count'].sum(), radius=1, colors=outer_colors, labels=df['Class'].drop_duplicates(), autopct='%1.1f%%',
wedgeprops=dict(width=size, edgecolor='w'))
ax.pie(df['count'], radius=1-size, colors=inner_colors, labels=df['product'], autopct='%1.1f%%',
wedgeprops=dict(width=size, edgecolor='w'))
ax.set(aspect="equal", title='Distribution 1 and 2')
plt.show()