如果条形颜色等于紫色,如何在条形图内插入文本

时间:2010-10-14 11:14:38

标签: python matplotlib

所以我有这个图像: alt text

如果只在紫色栏中留下'H37Rv',我该怎么办?

我的代码如下:

rects = ax.bar(ind, num, width, color=colors)

    for rect in rects:
        height = int(rect.get_height())

        if height < 5:
            yloc = height + 2
            clr = '#182866'
        else:
            yloc = height / 2.0
            clr = '#182866'

        p = 'H37Rv'
        xloc = rect.get_x() + (rect.get_width() / 2.0)
        ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold')

我也试过这个:

for rect in rects:
        if color == purple:
            height = int(rect.get_height())

            if height < 5:
                yloc = height + 2
                clr = '#182866'

但是我收到错误,说明颜色没有定义。

任何人都知道如何解决这个问题?

非常感谢!

2 个答案:

答案 0 :(得分:2)

如果你将第一个例子的最后三行移动到一个缩进级别,那么它们就是“else”子句的一部分,它将颜色设置为紫色,应该这样做。

[编辑:抱歉,我误读了一下。这也会使文本留在第二栏。据我所知,没有办法得到矩形的颜色,但你可以这样做:

rects = ax.bar(ind, num, width, color=colors)

rect = rects[-1]
height = int(rect.get_height())

if height < 5:
    yloc = height + 2
else:
    yloc = height / 2.0

clr = '#182866'
p = 'H37Rv'
xloc = rect.get_x() + (rect.get_width() / 2.0)
ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold')

这样只会在最后一个栏中设置文字。

如果它可能是任何可能是紫色的条形,不一定是最后一条,那么,你已经得到了用矩形初始化的颜色列表,所以:

rects = ax.bar(ind, num, width, color=colors)

for i in range(len(colors):
    if colors[i] == purple: # or however you specified "purple" in your colors list
       labelled_rects.append(i)

for i in labelled_rects:
    rect = rects[i]
    height = int(rect.get_height())

    if height < 5:
        yloc = height + 2
    else:
        yloc = height / 2.0

    clr = '#182866'
    p = 'H37Rv'
    xloc = rect.get_x() + (rect.get_width() / 2.0)
    ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold')

答案 1 :(得分:2)

您可以使用rect.get_facecolor()获取矩形的颜色,这样您就可以按照自己的方式放置标签。

或者,既然您知道在绘制条形图时使用了哪些颜色,并且它们是由列表表示的,那么您确实可以轻松获得紫色矩形列表。