迭代Pandas系列以创建新的图表图例

时间:2017-10-08 09:40:22

标签: python-2.7 pandas matplotlib

分组等后,我得到了一个类似下面例子中的系列。我想显示每个栏的平均数。下面的代码只显示了一个条目(当然,因为我只有一个“图例”)。任何人都可以建议一种聪明的方式来显示这些数字吗?

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
import pandas

# create Series
dict_ = {"Business" : 104.04,"Economy":67.04, "Markets":58.56, "Companies":38.48}
s = pandas.Series(data=dict_)

# plot it
ax = s.plot(kind='bar', color='#43C6DB', stacked=True, figsize=(20, 10), legend=False)
plt.tick_params(axis='both', which='major', labelsize=14)
plt.xticks(rotation=30) #rotate labels
# Shrink current axis by 20%
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])
#create new legend
legend = ['%s (%.1f a day)' %(i, row/7) for i, row in s.iteritems()]
# Put the legend to the right of the current axis
L = ax.legend(legend, loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)
plt.show()

enter image description here

1 个答案:

答案 0 :(得分:1)

图例只有一个条目。这是一个蓝色条的句柄。因此,即使将标签设置为较长的​​列表,也只将该列表的第一个元素用作现有句柄的标签。

这个想法可以是复制图例句柄以使其与标签

具有相同的大小
legend = ['%s (%.1f a day)' %(i, row/7) for i, row in s.iteritems()]
h,l = ax.get_legend_handles_labels()
L = ax.legend(handles = h*len(legend), labels=legend, loc='center left', 
              bbox_to_anchor=(1, 0.5), fontsize=18)

enter image description here