如何在条形颜色为紫色时插入文本
我有一张图片:

我想做的是只在紫色条上保留'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')