PDF, сгенерированный matplotlib, не может быть просмотрен в программе чтения акробатов
Я строю данные с помощью matplotlib, включая шрифты LaTeX. Созданный PDF-файл может отображаться evince, inkscape, GIMP, но не acroread и т. Д. Adobe Reader. Прототип кода работает с большим количеством рисунков, и только несколько графиков имеют эту проблему.
...
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111)
savedpi = 250
fileformat = 'pdf'
...
p12,=ax.plot(plimit12-binSize/2.0, mean12, '-', lw=2)
ax.set_yscale('log')
ax.yaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.legend([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12], [ "C01", "C02", "C03", "C04", "C05", "C06", "C07", "C08", "C09", "C10", "C11", "C12"],numpoints=1, loc=1, ncol=3)
plt.savefig(savepath+'veloDisp'+'.pdf',dpi=None,format=fileformat)
Один из этих проблемных файлов должен быть найден на http://ubuntuone.com/0kuZIKYeZQyGckE5jonPy6
Кто-нибудь сталкивался с такой проблемой?
РЕДАКТИРОВАТЬ: Спасибо, Уильям Денман, на самом деле, открывая в evince и печатая в pdf-работах, теперь это можно посмотреть в acroread. Интересно, что другие сюжеты со шрифтами LaTeX работают с самого начала. Я не получаю никаких сообщений об ошибках, из которых я мог бы догадаться, в чем проблема, вот почему я спросил здесь в первую очередь. Пока ваш обходной путь в порядке, спасибо. Однако мне бы очень хотелось узнать, как этого вообще можно избежать. Поскольку эти сюжеты должны быть частью публикации, я должен подумать и о тех людях, которые используют Adobe PDF Viewer.
РЕДАКТИРОВАТЬ: Как предложено, я открыл поток в списке рассылки разработчиков MPL, см. http://matplotlib.1069221.n5.nabble.com/PDF-not-readable-by-Adobe-PDF-readers-td42580.html
РЕДАКТИРОВАТЬ: Решено разработчиками Matplotlib! Проблема была в линии
ax.axvline(x=1, c='#000000', lw='2', alpha=0.5)
который содержит строку в качестве ширины линии. Должно быть
ax.axvline(x=1, c='#000000', lw=2, alpha=0.5)
К сожалению, стандартный pdf-бэкэнд не предупреждает об этом (пока).
1 ответ
После погони за моей собственной ошибкой в matplotlib я понял, основываясь на этом посте, и реферал, который ОП делает на сайте matplotlib, что погоня за ошибками в matplotlib может быть сделана с помощью cairo. pip install cairo
, Затем поверх всех других импортов MPL добавьте:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ...
import matplotlib
matplotlib.use("cairo")
from matplotlib.backends.backend_pdf import PdfPages
..etc.
в противном случае погоня не удастся, потому что серверная часть уже установлена и загружена....