擅长:python、mysql、java
<p>按照@Scott的回答,您可以得到所需的堆叠柱。在</p>
<pre><code>import matplotlib.pyplot as plt
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']
df_out = df.unstack()
d = dict(zip(df.columns.get_level_values(0),cycle))
c = df_out.columns.get_level_values(0).map(d)
g=df_out.plot.bar(stacked=True, color=c, figsize=(10,8), edgecolor='k')
</code></pre>
<p>要添加标签,您需要找到正确的位置并迭代地添加标签。<br/>
以下是一种方法:</p>
<h2>编辑:仅一个循环</h2>
^{pr2}$
<p>原液</p>
<pre><code>for x ,date in enumerate(df_out.index):
h=0
city=df_out.iloc[x][df_out.iloc[x]!=0].dropna().index.get_level_values(1) #get cities
for y,val in enumerate(df.index.get_level_values(0)):
if val==date:
g.text(x,1+h-0.5,"%s" % city[h])
h+=1
else:
continue
</code></pre>
<p><a href="https://i.stack.imgur.com/cX6Gp.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/cX6Gp.png" alt="image"/></a></p>