Как изменить ширину линии штриховки в 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()
Ответы
Ответ 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
Я полностью понимаю, что это может привести к другим проблемам, но я решил, что стоит упомянуть.