<p>因此,注释者是正确的,当只有一个值带有<code>value_counts()</code>时,您会遇到问题</p>
<p>因此,我将DF转换为:</p>
<pre class="lang-py prettyprint-override"><code>df = df.T.apply(pd.Series.value_counts, axis=1).fillna(0).reset_index()
df.columns = ('question', 'no', 'si')
</code></pre>
<p>创建了使代码更清晰所需的子批次索引列表:</p>
<pre class="lang-py prettyprint-override"><code>subplot_list = []
for i in range(2):
for j in range(3):
subplot_list.append([i,j])
</code></pre>
<p>并添加了一个循环来遍历每个问题(问题为“a”、“b”等):</p>
<pre class="lang-py prettyprint-override"><code> for index, row in new_df.iterrows():
if row['question'] == 'a':
pass
else:
current_sub = subplot_list[index-1]
row_num = current_sub[0]
column = current_sub[1]
ax[row_num,column].pie(
[row['no'], row['si']],
colors=colors,
autopct = '%1.1f%%',
textprops=textprops,
wedgeprops=dict(width=0.5),
pctdistance=0.7
)
ax[row_num,column].set_title(row['question'],fontsize=10)
</code></pre>
<p>输出的完整代码如下所示:</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import matplotlib.pyplot as plt
colnames=['a','b','c','d','e','f','g']
values=[
['SI','SI','NO','SI','SI','SI','NO'],
['SI','NO','NO','SI','NO','SI','NO'],
['SI','SI','NO','SI','SI','SI','NO'],
['SI','NO','NO','NO','NO','SI','SI'],
['SI','NO','NO','NO','NO','SI','NO']]
df=pd.DataFrame(values,columns=colnames)
df = df.T.apply(pd.Series.value_counts, axis=1).fillna(0).reset_index()
df.columns = ('question', 'no', 'si')
subplot_list = []
for i in range(2):
for j in range(3):
subplot_list.append([i,j])
def pieplotstest(df):
fig,ax =plt.subplots(2,3,facecolor=(1, 1, 1),figsize=(7.2,4.3))
plt.style.use('fivethirtyeight')
colors=["#172a3d","#e33e31"]
textprops=dict(color="w",weight='bold',size=5)
labels=['NO','SI']
for index, row in new_df.iterrows():
if row['question'] == 'a':
pass
else:
current_sub = subplot_list[index-1]
row_num = current_sub[0]
column = current_sub[1]
ax[row_num,column].pie(
[row['no'], row['si']],
colors=colors,
autopct = '%1.1f%%',
textprops=textprops,
wedgeprops=dict(width=0.5),
pctdistance=0.7
)
ax[row_num,column].set_title(row['question'],fontsize=10)
fig.legend(labels,
loc=4,
fontsize=7
)
plt.suptitle('Como estan distribuidas tus ventas')
plt.savefig(f'orders3.png',dpi=600,transparent=True)
</code></pre>
<p><a href="https://i.stack.imgur.com/rillw.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/rillw.png" alt="Pie chart in a loop"/></a></p>