otmezger otmezger - 22 days ago 7
Python Question

python + matplotlib: how can I change the bar's line width for a single bar?

I have a bar plot consisting in 3 stacked series and 5 bars. I want to highlight one single bar (all 3 stacked elements) by changing the width of the line.

I'm drawing the bars with the following command:

mybar = ax.bar(x,Y[:,i],bottom=x,color=colors[i],edgecolor='none',width=wi,linewidth = 0)
bar_handles = np.append(bar_handles,mybar)


I have handle for the bar I want to change stored in the array
bar_handles
, is there a way to change a bar's
edgecolor
and
linewidth
property after it has been drawn?

Answer

I ended up doing it like this:

ax.axvspan(X1,
           X1+wi,
           ymax=Y2,
           facecolor='none',
           edgecolor='black',
           linewidth=2)

…where

X1 = bar_handles[startBlock].get_x()
wi = bar_handles[startBlock].get_width()
Y2 = ax.transLimits.transform((0,bar_handles[startBlock].get_height()))[1]

This produces an edge over my bar — including all the elements within — without the horizontal like between the elements.

Comments