python + matplotlib: как изменить ширину линии бара для одного бара?
у меня есть участок бара, состоящий из 3 штабелированных серий и 5 баров. Я хочу выделить один бар (все 3 сложенных элемента), изменив ширину линии.
Я рисую бары со следующей командой:
mybar = ax.bar(x,Y[:,i],bottom=x,color=colors[i],edgecolor='none',width=wi,linewidth = 0)
bar_handles = np.append(bar_handles,mybar)
у меня есть дескриптор для бара, который я хочу изменить, хранящийся в массиве bar_handles
, есть ли способ изменить edgecolor
и linewidth
собственность после того, как он был составлен?
2 ответов
ax.bar
возвращает Container
художников; каждый "художник" - это Rectangle
С set_linewidth
и set_edgecolor
методы.
чтобы изменить настройки, скажем, второго бара в mybar
, вы могли бы сделать это:
mybar[1].set_linewidth(4)
mybar[1].set_edgecolor('r')
вот скрипт, который показывает, как это можно использовать для изменения ширины строки стека:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,2,3])
y1 = np.array([3,2.5,1])
y2 = np.array([4,3,2])
y3 = np.array([1,4,1])
width = 0.5
handles = []
b1 = plt.bar(x, y1, color='#2040D0', width=width, linewidth=0)
handles.append(b1)
b2 = plt.bar(x, y2, bottom=y1, color='#60A0D0', width=width, linewidth=0)
handles.append(b2)
b3 = plt.bar(x, y3, bottom=y1+y2, color='#A0D0D0', width=width, linewidth=0)
handles.append(b3)
# Highlight the middle stack.
for b in handles:
b[1].set_linewidth(3)
plt.xlim(x[0]-0.5*width, x[-1]+1.5*width)
plt.xticks(x+0.5*width, ['A', 'B', 'C'])
plt.show()
этот скрипт создает следующую гистограмму:
Я делал так:
ax.axvspan(X1,
X1+wi,
ymax=Y2,
facecolor='none',
edgecolor='black',
linewidth=2)
...где
X1 = bar_handles[startBlock].get_x()
wi = bar_handles[startBlock].get_width()
Y2 = ax.transLimits.transform((0,bar_handles[startBlock].get_height()))[1]
это создает ребро над моим баром-включая все элементы внутри-без горизонтального типа между элементами.