matplotlib : insérer un graphe dans un PDF

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je souhaiterais insérer un graphe généré avec matplotlib dans un fichier PDF (que je crée avec PyLaTeX). Je parviens à insérer une page, avec pdfpages et ce code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from pylatex import Document, Package
from pylatex.command import Command



if __name__ =="__main__":
    doc = Document('basic')

    pdfpages = doc.packages.append(Package('pdfpages'))
    plot = Command('includepdf', arguments='plot.pdf', options=['pages={1}'])

    doc.append('Some text.')
    doc.append(plot)
    doc.append('Some text 2.')

    doc.generate_pdf()

Rendu :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{pdfpages}


\begin{document}
Some text.
\includepdf[pages={1}]{plot.pdf}
Some text 2.
\end{document}

Mais j'obtiens ici trois pages. Or, je souhaiterais que le graphe prenne la place disponible, comme à la page 12 de ce PDF. Je pourrais générer une image puis l'insérer, mais sa taille ne s'adapterait pas au zoom sur le PDF.

Merci !

+0 -0

Les pdf ne sont pas fais pour représenter une image et ce n'est pas étonant que ça se passe comme ça. Le problème là est surtout l'utilisation de includepdf dans le latex qui insere une page et non une image.

Donc deux solutions :

  • Soit tu utilise une autre fonction que includepdf dans latex pour insérer le document comme image. Mais j'y crois pas trop.
  • Soit tu génère une image depuis matplotlib. Pour ton histoire de zoom, là encore, deux solutions :

  • tu met un dpi assez élevé et du coup ça devrait être propre quelque soit le zoom

  • tu utilise un format d'image vectoriel. Chez moi matplotlib est capable de générer du SVG. Donc si tu peux l'insérer, ça fait exactement ce que tu veux.

Si tu as un PDF, tu peut l'inclure directement comme n'importe quelle autre image avec pdflatex, et préciser la largeur.

Un autre solution (qui est celle que j'utilise pour faire des graphes sur mes cours) est d'utiliser gnuplot avec le terminal cairolatex. De cette manière, c'est gnuplot qui génère du code LaTeX, puis TeX qui crée ton graphe. Lequel est donc au format PDF, directement zoom able et avec la même police que le reste du texte.

+0 -0

Merci. ^^ La manière suivante, plutôt simple, convient :

1
2
3
4
5
6
7
import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5, 6]
y = [15, 2, 7, 1, 5, 6, 9]

plt.plot(x, y)
plt.savefig("./plot.pdf")
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}


\begin{document}

Some text.

\begin{figure}[htbp]
  \centering
  \includegraphics[width=\textwidth]{plot}
  \caption{SVG sexy image}
\end{figure}

Some other text.

\end{document}
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte