我正在使用matplotlib
类在from matplotlib.patches import Patch
内部的图中添加补丁。请参见下面的示例代码-
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
n = 5
hatch_1 = 'o'
hatch_2 = '.'
opacity = 0.4
bar_width = 0.4
y = np.random.randint(low=0, high=10, size=n)
x = np.arange(n)
bars = plt.bar(x, y, bar_width, align='center', alpha=opacity, fill=False)
for bar in bars:
bar.set_hatch(hatch_1)
y = np.random.randint(low=0, high=10, size=n)
bars = plt.bar(x + bar_width, y, bar_width,
align='center', alpha=opacity, fill=False)
for bar in bars:
bar.set_hatch(hatch_2)
patch_1 = Patch(fill=False, label='Hatch 1', hatch=hatch_1, alpha=opacity)
patch_2 = Patch(fill=False, label='Hatch 2', hatch=hatch_2, alpha=opacity)
# add legends
plt.legend(handles=[patch_1, patch_2], loc='upper right')
plt.show()
用于图例的舱口盖不正确。我想如果我把补丁做大些,那将是可见的。
如何使补丁变大?
答案 0 :(得分:2)
您可以通过两种方式更改图例补丁的大小。
首先,您可以使用handlelength
选项将宽度增加到plt.legend
。
但是,无法使用kwargs来增加它们的高度。因此,我们需要在创建图例之后遍历补丁。如果在创建图例leg = plt.legend(...)
时保留了图例的引用,则可以使用for patch in leg.get_patches():
遍历补丁。
然后,您可以使用patch.set_height()
更改色块的高度。
但是,所有这些修补都意味着它们不会完全正确对齐。因此,我们还需要稍微更改其垂直位置(使用patch.set_y()
)。
我还发现它有助于增加图例中标签的垂直间距,以使其很好地适应(使用labelspacing
kwarg)。
最后,我在图例标签的开头添加了新行,以使它们看上去都很好(label='\nHatch 1'
)。
下面是一个完整的脚本。您可能希望使用labelspacing
,handlelength
,patch.set_height()
和patch.set_y()
的值来满足您的需求。
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
n = 5
hatch_1 = 'o'
hatch_2 = '.'
opacity = 0.4
bar_width = 0.4
y = np.random.randint(low=0, high=10, size=n)
x = np.arange(n)
bars = plt.bar(x, y, bar_width, align='center', alpha=opacity, fill=False)
for bar in bars:
bar.set_hatch(hatch_1)
y = np.random.randint(low=0, high=10, size=n)
bars = plt.bar(x + bar_width, y, bar_width,
align='center', alpha=opacity, fill=False)
for bar in bars:
bar.set_hatch(hatch_2)
patch_1 = Patch(fill=False, label='\nHatch 1', hatch=hatch_1, alpha=opacity)
patch_2 = Patch(fill=False, label='\nHatch 2', hatch=hatch_2, alpha=opacity)
# add legends
leg = plt.legend(handles=[patch_1, patch_2], loc='upper right', labelspacing=1.5, handlelength=4)
for patch in leg.get_patches():
patch.set_height(22)
patch.set_y(-6)
plt.show()
答案 1 :(得分:1)
n = 5
hatch_1 = 'O'
hatch_2 = '.'
opacity = 0.4
bar_width = 0.4
y = np.random.randint(low=0, high=10, size=n)
x = np.arange(n)
bars = plt.bar(x, y, bar_width, align='center', alpha=opacity, fill=False)
for bar in bars:
bar.set_hatch(hatch_1)
y = np.random.randint(low=0, high=10, size=n)
bars = plt.bar(x + bar_width, y, bar_width,
align='center', alpha=opacity, fill=False)
for bar in bars:
bar.set_hatch(hatch_2)
patch_1 = Patch(fill=False, label='Hatch 1', hatch=hatch_1, alpha=opacity)
patch_2 = Patch(fill=False, label='Hatch 2', hatch=hatch_2, alpha=opacity)
plt.rcParams['figure.figsize'] = (25,15)
# add legends
plt.legend(handles=[patch_1, patch_2], loc='upper right')
plt.show()
Made your small o as O and increase the size of figure that will make sense i guess
答案 2 :(得分:1)
我认为matplotlib
提供的最简单的方法是使用prop
大小来增加/减小图例大小来定义图例的属性。您只需要执行以下操作即可选择'size'
作为首选。
plt.legend(handles=[patch_1, patch_2], loc='best', prop={'size': 24})
答案 3 :(得分:1)