Подтвердить что ты не робот

Как изменить ширину линии штриховки в 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()
4b9b3361

Ответ 1

Как и в matplotlib версии 2.0, вы можете изменить параметр ширины линии следующим образом:

import matplotlib as mpl
mpl.rcParams['hatch.linewidth'] = 0.1  # previous pdf hatch linewidth
mpl.rcParams['hatch.linewidth'] = 1.0  # previous svg hatch linewidth

Это кажется лучшим способом, чем то, что у людей выше. Вы можете проверить версию matplotlib:

import matplotlib as mpl
print(mpl.__version__) # should be 2.x.y

Ответ 2

Если вы используете pdf и имеете права sudo, вы можете изменить его в backend_pdf.py. Существует строка

self.output(0.1, Op.setlinewidth)

Обычно он находится в /usr/lib/pymodules/python 2.7/matplotlib/backends/backend_pdf.py.

Также кто-то написал взломать это из вашего script (все равно нужно выполнить права 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)

Ответ 3

Есть решение, которое очень хаки, но позволяет делать то, что вы хотите, без изменения внутренних файлов matplotlib: вы можете обезглавить patchHatches PdfFile так:


# make sure you have the correct imports,
# they may differ depending on the matplotlib version
import matplotlib.backends.backend_pdf
from matplotlib.externals import six
from matplotlib.backends.backend_pdf import Name, Op
from matplotlib.transforms import Affine2D

def setCustomHatchWidth(customWidth):

     def _writeHatches(self):
        COPY CODE FROM matplotlib.__path__[0] + "/backends/backend_pdf.py" HERE
        change the line 
            self.output(0.1, Op.setlinewidth)
        to 
            self.output(customWidth, Op.setlinewidth)

    matplotlib.backends.backend_pdf.PdfFile.writeHatches = _writeHatches

Затем вы можете сделать

setCustomWidth(2)

прежде чем сохранять фигуру в формате pdf.

Ответ 4

У меня есть обходное решение, которое может помочь некоторым. Я использую это, когда делаю свои заключительные сюжеты для отчетов. На ширину штриховки влияет настройка dpi в

plt.savefig('pic',dpi=300)

Следующая цифра выполняется при 80 DPI введите описание изображения здесь

Затем снова введите описание изображения здесь при 400 DPI

Я полностью понимаю, что это может привести к другим проблемам, но я решил, что стоит упомянуть.