我需要在用matplotlib制作的栏中降低填充图案的密度。
我添加阴影的方式:

kwargs = {'hatch':'|'}
rects2 = ax.bar(theta, day7, width,fill=False, align='edge', alpha=1, **kwargs)

kwargs = {'hatch':'-'}
rects1 = ax.bar(theta, day1, width,fill=False, align='edge', alpha=1, **kwargs)

我知道您可以通过在图案中添加更多字符来增加密度,但是如何降低密度呢?

最佳答案

这是一个完整的技巧,但是应该适合您的情况。

基本上,您可以定义一个新的填充图案,输入图案越长,填充图案的密度就越低。我已经为您改编了HorizontalHatch模式(请注意下划线字符的使用):

class CustomHorizontalHatch(matplotlib.hatch.HorizontalHatch):
    def __init__(self, hatch, density):
        char_count = hatch.count('_')
        if char_count > 0:
            self.num_lines = int((1.0 / char_count) * density)
        else:
            self.num_lines = 0
        self.num_vertices = self.num_lines * 2

然后,您必须将其添加到可用的填充图案列表中:
matplotlib.hatch._hatch_types.append(CustomHorizontalHatch)

现在,在绘图代码中,您可以使用定义的图案:
kwargs = {'hatch':'_'}  # same as '-'
rects2 = ax.bar(theta, day7, width,fill=False, align='edge', alpha=1, **kwargs)

kwargs = {'hatch':'__'}  # less dense version
rects1 = ax.bar(theta, day1, width,fill=False, align='edge', alpha=1, **kwargs)

请记住,这不是一个很好的解决方案,在将来的版本中可能会随时中断。同样,我的模式代码也只是一个快速的技巧,您可能需要对其进行改进。我从HorizontalHatch继承,但是要获得更大的灵活性,您可以在HatchPatternBase上构建。

关于python - 如何降低Matplotlib中的图案填充密度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4745937/

10-12 18:23