matplotlib条形图,数据框行名称为图例

时间:2016-01-26 13:58:54

标签: python numpy pandas matplotlib

我正在尝试使用pandas数据帧的值设置条形图的图例。我搜索并找不到解决方案,我使用了另一个来自SO的片段来注释条形码。生成的图表按照我的要求显示了系列中不同颜色的条形,甚至是条形图的值。例如,在Excel中,您可以使用将图例值显示为图例的图例。我想在这里获得这个功能。

这是一个MWE:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
import seaborn, itertools
seaborn.set()

def flip(items, ncol):
    return itertools.chain(*[items[i::ncol] for i in range(ncol)])

def annotateBars(row, ax=ax):
    if row['A'] < 0.2:
        color = 'black'
        vertalign = 'bottom'
        vertpad = 0.02
    else:
        color = 'white'
        vertalign = 'top'
        vertpad = -0.02

    ax.text(row.name, row['A'] + vertpad, "{:.4f}%".format(row['A']),
            zorder=10, rotation=90, color=color,
            horizontalalignment='center',
            verticalalignment=vertalign,
            fontsize=14, weight='heavy')

labels1=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
width = 0.75
my_colors = 'gbkymc'
arr1 = np.random.random((1, 5))
arr1_ind = np.arange((arr1.shape[1]))
df_arr1 = pd.DataFrame(zip(*arr1), index = arr1_ind, columns = ['A'])
ax = df_arr1.plot(kind='bar', width = 0.85, alpha = 0.5, color = my_colors)
# plt.xticks(arr1_ind+width/4, arr1_ind)

ax.set_xticks(arr1_ind)
ax.set_xticklabels([labels1[i] for i in arr1_ind])
hndls, lbls = ax.get_legend_handles_labels()
plt.legend(flip(hndls, 2), flip(labels1, 2), loc='best', ncol=2)

junk = df_arr1.apply(annotateBars, ax=ax, axis=1)
plt.tick_params(
    axis='x',          # changes apply to the x-axis
    which='both',      # both major and minor ticks are affected
    bottom='off',      # ticks along the bottom edge are off
    top='off',         # ticks along the top edge are off
    labelbottom='off') # labels along the bottom edge are off
plt.tight_layout()
plt.show()

Plot generated showing only the first label

1 个答案:

答案 0 :(得分:2)

听起来你想让传奇每种颜色都有一个项目。

目前,您只创建了一位艺术家(只需拨打一次application/x-www-form-urlencoded),因此图例只会有一个条目。

作为做一些类似于你想要的事情的简单例子:

bar

enter image description here