所以我有这个图像:
如果只在紫色栏中留下'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'
但是我收到错误,说明颜色没有定义。
任何人都知道如何解决这个问题?
非常感谢!
答案 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()
获取矩形的颜色,这样您就可以按照自己的方式放置标签。
或者,既然您知道在绘制条形图时使用了哪些颜色,并且它们是由列表表示的,那么您确实可以轻松获得紫色矩形列表。