如何在条形颜色为紫色时插入文本

0 投票
2 回答
1063 浏览
提问于 2025-04-16 05:29

我有一张图片:

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 个回答

2

你可以通过 rect.get_facecolor() 来获取一个矩形的颜色,这样你就可以按照自己的想法放置标签了。

另外,因为你知道在绘制条形图时用了哪些颜色,如果这些颜色是用一个列表表示的,那么你就可以很简单地找到所有紫色的矩形。

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')

撰写回答