python+matplotlib:如何更改单个条的线宽?

2024-05-15 04:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个条形图,由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中要更改的条的句柄,是否有方法在绘制后更改条的edgecolorlinewidth属性?


Tags: 命令元素宽度绘制baraxhandles线条
2条回答

我最后是这样做的:

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]

这会在我的条上产生一条边-包括所有元素在内-没有元素之间的水平线。

ax.bar返回一个艺术家的Container;每个“艺术家”是一个具有set_linewidthset_edgecolor方法的Rectangle

要更改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()

此脚本创建以下条形图:

stacked bar chart

相关问题 更多 >

    热门问题