如何在matplotlib中更改填充的线宽?

mon*_*era 15 python numpy matplotlib

有没有办法增加matplotlib中的影线宽度?

例如,以下代码linewidth仅通过指定更改边的宽度.我想改变用于舱口的线的线宽.

import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(100)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(x, fill=False, hatch='/', linewidth=2)

plt.show()
Run Code Online (Sandbox Code Playgroud)

hei*_*Bug 15

从matplotlib 2.0版开始,您可以直接更改linewidth参数,如下所示:

import matplotlib as mpl
mpl.rcParams['hatch.linewidth'] = 0.1  # previous pdf hatch linewidth
mpl.rcParams['hatch.linewidth'] = 1.0  # previous svg hatch linewidth
Run Code Online (Sandbox Code Playgroud)

这似乎是比上面的人更好的解决方法.您可以通过以下方式检查matplotlib版本:

import matplotlib as mpl
print(mpl.__version__) # should be 2.x.y
Run Code Online (Sandbox Code Playgroud)


Nic*_*ert 4

如果您使用 pdf 并拥有 sudo 权限,您可以在 backend_pdf.py 中更改它。有一条线

self.output(0.1, Op.setlinewidth)
Run Code Online (Sandbox Code Playgroud)

通常它位于 /usr/lib/pymodules/python2.7/matplotlib/backends/backend_pdf.py 。

还有人写了一个 hack 来从你的脚本中执行此操作(仍然需要 sudo 权限才能执行)。来自这里的解决方案: http: //micol.tistory.com/358

import os
import re
import matplotlib

def setHatchThickness(value):
libpath = matplotlib.__path__[0]
backend_pdf = libpath + "/backends/backend_pdf.py"
with open(backend_pdf, "r") as r:
    code = r.read()
    code = re.sub(r'self\.output\((\d+\.\d+|\d+)\,\ Op\.setlinewidth\)',
                   "self.output(%s, Op.setlinewidth)" % str(value), code)
    with open('/tmp/hatch.tmp', "w") as w:
        w.write(code)
    print backend_pdf
    os.system('sudo mv /tmp/hatch.tmp %s' % backend_pdf)


setHatchThickness(1.0)
Run Code Online (Sandbox Code Playgroud)