Python und Latex

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Hi,
ich hab mal ne frage. Und zwar habe ich meine Abbildungen jetzt mit Python erzeugt und speicher diese als PDF und füge sie dann in Latex ein. Das mach ich mit '\includegraphics{}'. Die größe lege ich dann fest mit 'width = 0.6textwidth' in Latex. Dabei verändert sich aber immer die Schriftgröße und auch die Schrift ist anderst. Gibt es eine Möglichkeit das zu verhindern. Also das wenn ich in Python Schriftgröße 10pt eingestellt habe das dann auch in Latex obwohl 'width = 0.6textwidth' ist, die Schriftgöße 10pt ist? Ich hoffe ihr verstehst was ich meine...
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lienz20013: Du bindest in Dein Dokument ein Bild ein. Ein Bild weiß nichts von irgendeiner Schriftgröße. Also entweder das Bild schon in der passenden Größe erzeugen, oder das Bild aus LaTeX-Bordmitteln zusammensetzen.
BlackJack

<korinthenkacker>Das PDF weiss schon etwas von Schriftgrössen, aber wenn das skaliert wird, dann werden auch die Texte mitskaliert, sprich man kann nicht den Text von der Skalierung ausnehmen.</korinthenkacker>
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Ja, genau. Also hier gibt es so eine art Lösung die versteh ich nicht ganz bin noch neuling in Python.
http://bkanuka.com/articles/native-latex-plots/
könnt ihr damit was anfangen?
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Also damit meine ich kann das jemand in ein verständliches Minimalbeispiel umwandeln? Besonderst den unteren Teil versteh ich nicht in dem er sein Plot erzeugt
BlackJack

@Lienz20013: Das in dem Blogbeitrag ist doch das Minimalbeispiel. Wo genau liegt das Problem? Bekommst Du irgendwo eine Fehlermeldung? Wenn ja welche?
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Also ich habe jetzt alles hin bekommen außer die Umlaute wie ich die schreiben kann

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.use('pgf')
 
def figsize(scale):
    fig_width_pt = 418.25543 # Get this from LaTeX using \the\textwidth
    inches_per_pt = 1.0/72.27 # Convert pt to inch
    golden_mean = (np.sqrt(5.0)-1.0)/2.0 # Aesthetic ratio (you could change this)
    fig_width = fig_width_pt*inches_per_pt*scale # width in inches
    fig_height = fig_width*golden_mean # height in inches
    fig_size = [fig_width,fig_height]
    return fig_size
 
pgf_with_latex = { # setup matplotlib to use latex for output
"pgf.texsystem": "pdflatex", # change this if using xetex or lautex
"text.usetex": True, # use LaTeX to write all text
"font.family": "serif",
"font.serif": ['palatino'], # blank entries should cause plots to inherit fonts from the document
"font.sans-serif": ['palatino'],
"font.monospace": ['palatino'],
"axes.labelsize": 10, # LaTeX default is 10pt font.
"text.fontsize": 10,
"legend.fontsize": 8, # Make the legend/label fonts a little smaller
"xtick.labelsize": 8,
"ytick.labelsize": 8,
"figure.figsize": figsize(0.9),} # default fig size of 0.9 textwidth
#"pgf.preamble": [
#r"\usepackage[utf8x]{inputenc}", # use utf8 fonts becasue your computer can handle it :)
#r"\usepackage[T1]{fontenc}", # plots will be generated using this preamble
#]
#}
mpl.rcParams.update(pgf_with_latex)
 

 
# I make my own newfig and savefig functions

fig = plt.figure(figsize=figsize(1))
ax = fig.add_subplot(111)

 
 
plt.plot([1,2,3,4])
ax.set_xlabel('X Label ä')
ax.set_ylabel('EMA')
 
plt.savefig('ema.pgf') 
plt.savefig('ema.pdf') 
Also wegen dem ä gehts nicht. Kann jemand helfen? Und ich möchte das ä dann auch in Latex üvberführen.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lienz20013: Was wird denn statt dem "ä" gedruckt? Du mußt das selbe Encoding schreiben, wie es LaTeX dann auch lesen will. In Deinem Fall hast Du für LaTeX UTF8 eingestellt. Welches Encoding hast Du für die Python-Datei gewählt?
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Auch utf 8 oder?

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 24 10:54:12 2015

@author: -
"""
#===========================================================================
#===========================================================================
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.use('pgf')
 
def figsize(scale):
    fig_width_pt = 418.25543 # Get this from LaTeX using \the\textwidth
    inches_per_pt = 1.0/72.27 # Convert pt to inch
    golden_mean = (np.sqrt(5.0)-1.0)/2.0 # Aesthetic ratio (you could change this)
    fig_width = fig_width_pt*inches_per_pt*scale # width in inches
    fig_height = fig_width*golden_mean # height in inches
    fig_size = [fig_width,fig_height]
    return fig_size
 
pgf_with_latex = { # setup matplotlib to use latex for output
"pgf.texsystem": "pdflatex", # change this if using xetex or lautex
"text.usetex": True, # use LaTeX to write all text
"font.family": "serif",
"font.serif": ['palatino'], # blank entries should cause plots to inherit fonts from the document
"font.sans-serif": ['palatino'],
"font.monospace": ['palatino'],
"axes.labelsize": 10, # LaTeX default is 10pt font.
"text.fontsize": 10,
"legend.fontsize": 8, # Make the legend/label fonts a little smaller
"xtick.labelsize": 8,
"ytick.labelsize": 8,
"figure.figsize": figsize(0.9), # default fig size of 0.9 textwidth
"pgf.preamble": [
r"\usepackage[utf8x]{inputenc}", # use utf8 fonts becasue your computer can handle it :)
r"\usepackage[T1]{fontenc}", # plots will be generated using this preamble
]
}
mpl.rcParams.update(pgf_with_latex)
 
#Direct input 
mpl.rcParams['text.latex.preamble']=[r"\usepackage{palatino}"]
#Options
params = {'text.usetex' : True,
          'font.size' : 11,
          'font.family' : 'palatino',
          'text.latex.unicode': True,
          }
mpl.rcParams.update(params)
 
# I make my own newfig and savefig functions

fig = plt.figure(figsize=figsize(1.6))
ax = fig.add_subplot(111)

 
 
plt.plot([1,2,3,4])
ax.set_xlabel('X Label \xe4')
ax.set_ylabel('EMA')
 
plt.savefig('ema.pgf') 
plt.savefig('ema.pdf') 
und meine Latex Datei sieht so aus

Code: Alles auswählen

\documentclass[listof=toc, a4paper, 12pt, headsepline,openright, cleardoublepage=
empty, abstracton]{scrreprt}
\usepackage{pgf}
\usepackage{lscape}

\begin{document}
\begin{landscape}
\begin{figure}[b]
    \caption{A simple EMA plot.\label{fig:ema1}}
    \centering
    \input{ema.pgf}
\end{figure}
\end{landscape}
\end{document}
BlackJack

@Lienz20013: Ob das UTF8 ist hängt davon ab welche Python-Version das ist. Falls Python 2, dann definitiv nicht.
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Ich arbeite mit Spyder und mit der Python Version 2.7
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

So klappts erstmal

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 24 10:54:12 2015

@author: corny
"""
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.use('pgf')
 
def figsize(scale):
    fig_width_pt = 418.25543 # Get this from LaTeX using \the\textwidth
    inches_per_pt = 1.0/72.27 # Convert pt to inch
    golden_mean = (np.sqrt(5.0)-1.0)/2.0 # Aesthetic ratio (you could change this)
    fig_width = fig_width_pt*inches_per_pt*scale # width in inches
    fig_height = fig_width*golden_mean # height in inches
    fig_size = [fig_width,fig_height]
    return fig_size
 
pgf_with_latex = { # setup matplotlib to use latex for output
"pgf.texsystem": "pdflatex", # change this if using xetex or lautex
"text.usetex": True, # use LaTeX to write all text
'text.latex.unicode': True,
"font.family": 'palatino',
"font.serif": ['palatino'], # blank entries should cause plots to inherit fonts from the document
"font.sans-serif": ['palatino'],
"font.monospace": ['palatino'],
"axes.labelsize": 10, # LaTeX default is 10pt font.
"text.fontsize": 10,
"legend.fontsize": 8, # Make the legend/label fonts a little smaller
"xtick.labelsize": 8,
"ytick.labelsize": 8,
"figure.figsize": figsize(1), # default fig size of 0.9 textwidth
"pgf.preamble": [
r"\usepackage[utf8x]{inputenc}", # use utf8 fonts becasue your computer can handle it :)
r"\usepackage[T1]{fontenc}", # plots will be generated using this preamble
]
}
mpl.rcParams.update(pgf_with_latex)

# I make my own newfig and savefig functions

fig = plt.figure(figsize=figsize(1.6))
ax = fig.add_subplot(111)

 
 
plt.plot([1,2,3,4])
ax.set_xlabel(u'X Label ä')
ax.set_ylabel('EMA')
 
plt.savefig('ema.pgf') 
plt.savefig('ema.pdf')
Mit Latex Code

Code: Alles auswählen

\documentclass[listof=toc, a4paper, 12pt, headsepline,openright, cleardoublepage=
empty, abstracton]{scrreprt}
\usepackage{pgf}
\usepackage{lscape}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}
\begin{landscape}
\begin{figure}[b]
    \caption{A simple EMA plot.\label{fig:ema1}}
    \centering
    \input{ema.pgf}
\end{figure}
\end{landscape}
\end{document}
Antworten