带阴影线的 matplotlib 自定义图例

dub*_*dan 9 python matplotlib legend

我似乎可以弄清楚如何将句柄和标签传递matplotlib.patches.Patch给图例。

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches


a_val = 0.6
colors = ['#EA5739','#FEFFBE','#4BB05C']


circ1 = mpatches.Patch( facecolor=colors[0],alpha=a_val,hatch=['\\\\'],label='Label1')
circ2= mpatches.Patch( facecolor=colors[1],alpha=a_val,hatch='o',label='Label2')
circ3 = mpatches.Patch(facecolor=colors[2],alpha=a_val,hatch='+',label='Label3')

fig,(ax) = plt.subplots()

ax.legend(handles = [circ1,circ2,circ3],loc=2)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

为什么上例中的图例是空白的?

And*_*eak 11

要么我无法重现您的问题,要么您遗漏了一个巨大的错误。当我运行上面的代码时,我收到一个关于list不可散列的错误,这似乎源于第一个Patch调用的hatch=['\\\\']kwarg。删除列表语法(并使用带有 4 个反斜杠的原始字符串以获得额外效果)似乎对我在 matplotlib 2.0.2 上有用:

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches


a_val = 0.6
colors = ['#EA5739','#FEFFBE','#4BB05C']


circ1 = mpatches.Patch( facecolor=colors[0],alpha=a_val,hatch=r'\\\\',label='Label1')
circ2= mpatches.Patch( facecolor=colors[1],alpha=a_val,hatch='o',label='Label2')
circ3 = mpatches.Patch(facecolor=colors[2],alpha=a_val,hatch='+',label='Label3')

fig,(ax) = plt.subplots()

ax.legend(handles = [circ1,circ2,circ3],loc=2)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

上述结果

这就是你所看到的吗?