не удалось правильно импортировать файл EPS, созданный с помощью matplotlib, в LaTeX - PullRequest
1 голос
/ 15 марта 2012

Я сделал PDF и EPS файлы с помощью matplotlib (последняя версия из git-репозитория, v1.1.0-538-g8b1e5b8, но следующая проблема также возникает с последним выпуском) со следующим кодом.

import numpy as np
import matplotlib.pyplot as plt

def func(x,y):
    return (1- x/2 + x**5 + y**3)*np.exp(-x**2-y**2)

xmin, xmax = -3, 3
ymin, ymax = -1.2, 1.2

x0 = np.linspace(xmin, xmax, 100, endpoint=True)
y0 = np.sin(x0)
x1 = np.linspace(xmin, xmax, 10, endpoint=True)
y1 = np.sin(x1)

npix = 128
x = np.linspace(xmin, xmax, npix, endpoint=True)
y = np.linspace(xmin, xmax, npix, endpoint=True)
X,Y = np.meshgrid(x, y)
img = func(X, Y)

fig = plt.figure(figsize=(15, 3))

ax_img = fig.add_subplot(131)
ax_img.imshow(img, cmap=plt.cm.binary_r, origin='lower', interpolation='nearest', resample=False)
ax_img.axis('off')

ax0 = fig.add_subplot(132)
ax0.plot(x0, y0, ls='-', c='0.4', lw=0.8, label='Test 1')
ax0.set_xlim(xmin, xmax)
ax0.set_ylim(ymin, ymax)
ax0.set_xlabel("This is X-label", fontsize='xx-large')
ax0.set_ylabel("This is Y-label", fontsize='xx-large')

ax2 = fig.add_subplot(133)
ax2.plot(x0, y0, '-', c='0.4', lw=0.8, label='Test 2')
ax2.plot(x1, y1, 'o', c='0.4', lw=0.8, label='Test 2')
ax2.set_xlim(xmin, xmax)
ax2.set_ylim(ymin, ymax)
ax2.set_xlabel("This is X-label", fontsize='xx-large')
ax2.set_ylabel("This is Y-label", fontsize='xx-large')

fig_bottom = 0.05
fig_height = 0.9
fig_img_l  = 0.05
fig_img_w  = 0.15
fig_ax0_l = 0.25
fig_ax0_w = 0.4
fig_ax2_l = 0.7
fig_ax2_w = 0.25

ax_img.set_position([fig_img_l, fig_bottom, fig_img_w, fig_height])
ax0.set_position([fig_ax0_l, fig_bottom, fig_ax0_w, fig_height])
ax2.set_position([fig_ax2_l, fig_bottom, fig_ax2_w, fig_height])

art_txt1 = ax_img.text(0, 1.2, 'Header 1', ha='left', va='center', fontsize='x-large', transform=ax_img.transAxes)
art_txt2 = ax_img.text(0, 1.1, 'Header 2', ha='left', va='center', fontsize='x-large', transform=ax_img.transAxes)

fout_eps = 'mpl_test.eps'
fout_pdf = 'mpl_test.pdf'
plt.savefig(fout_eps, bbox_inches='tight', bbox_extra_artists=[art_txt1, art_txt2])
plt.savefig(fout_pdf, bbox_inches='tight', bbox_extra_artists=[art_txt1, art_txt2])

Файлы EPS (http://db.tt/8anYHL2w) и PDF (http://db.tt/r6QSZQp7)), созданные с помощью этого сценария, можно увидеть, как и ожидалось, с помощью gv и Preview.app. (Извините за отсутствие ссылок, поскольку в настоящее время я могу сделать 2 гиперссылки и еще один ниже).

Однако изображение на левой панели EPS не появляется, когда я помещаю рисунок в LaTeX следующим образом.

\documentclass[a4paper]{article}
\usepackage{graphicx}
\usepackage[cm]{fullpage}
\begin{document}
\begin{figure}[H]
  \begin{center}
    \includegraphics[bb= 0 0 1014.0875 257.796875, clip, width=0.95\linewidth]{mpl_test.pdf}
    \includegraphics[bb= 0 0 1014.0875 257.796875, draft, clip, width=0.95\linewidth]{mpl_test.pdf}
  \end{center}
  \caption{This is what I expect (PDF is used). Bottom panel shows BoundingBox of the figure on top panel by setting ``draft'' in \textbackslash{}includegraphics.}
\end{figure}
\begin{figure}
  \begin{center}
    \includegraphics[width=0.95\linewidth]{mpl_test.eps}
    \includegraphics[draft,width=0.95\linewidth]{mpl_test.eps}
  \end{center}
  \caption{But in reality... (w/ EPS)}
\end{figure}
\end{document}

Результирующий файл PDF: http://db.tt/J1GPthVO

Фигура, импортированная в формате PDF, выглядит как положено, но EPS не показывает левую панель с надписью «imshow» в matplotlib. Также удаляется самая левая часть Y-метки.

Я не уверен, вызвано ли это matplotlib или LaTeX. Если кто-то знает, как решить проблему, буду благодарен. Я хотел бы создавать EPS напрямую с помощью matplotlib, а не использовать программу преобразования, такую ​​как pdf2eps. И мне нужно использовать EPS для публикации из-за правил издательства.

Моя среда:

  • Mac OS X 10.7.3
  • Python 2.7.2 устанавливается вместе с Homebrew
  • LaTeX устанавливается с помощью MacTeX
...