goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Grafik aus Python mittels matplotlib2tikz in tex nutzen

 

Axel_S
Forum-Newbie
Forum-Newbie

Beiträge: 3
Anmeldedatum: 08.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2018, 17:07     Titel: Grafik aus Python mittels matplotlib2tikz in tex nutzen
  Antworten mit Zitat      
Hallo,

ich habe eine Frage zum Zusammenspiel dieser Software.
Ich tue folgendes:
Ich erstelle in Python Matplotlib einen Graphen.
Code • Öffne in Overleaf

import matplotlib as mpl
import matplotlib.pyplot as plt

import numpy as np
mpl.style.use('seaborn-colorblind')

import glob

from matplotlib2tikz import save as tikz_save

Daten_roh = np.loadtxt('plot_Tempkalibrierung_roh.dat',skiprows=6)
Daten_kal = np.loadtxt('plot_Tempkalibrierung_kal.dat',skiprows=6)

Daten_rohM = np.matrix([Daten_roh[:,0],
             ...
             Daten_roh[:,39]])

Daten_kalM = np.matrix([Daten_kal[:,0],
             ...
             Daten_kal[:,39]])

roh_min = np.squeeze(np.asarray(Daten_rohM.min(0)))
roh_max = np.squeeze(np.asarray(Daten_rohM.max(0)))
kal_min = np.squeeze(np.asarray(Daten_kalM.min(0)))
kal_max = np.squeeze(np.asarray(Daten_kalM.max(0)))

fig = plt.figure(figsize=(7,4))
ax = fig.add_subplot(111)  
xachse = np.arange(0, 27923)*2/3600
ax.fill_between(xachse[11500:12600],roh_min[11500:12600],roh_max[11500:12600],color = 'red',alpha=0.2, label ='roh')
ax.fill_between(xachse[11500:12600],kal_min[11500:12600],kal_max[11500:12600],color = 'blue',alpha=0.2, label ='kal')

ax.plot(xachse[11500:12600],Daten_kal[11500:12600,2],'k',label='ref')
ax.grid()      
plt.xlabel('Zeit (h)')
plt.ylabel('Zeit in \si{\\degreeCelsius}')
plt.ylim(59.95,60.45)
plt.legend()
#plt.show()
tikz_save('Kalibrierauswertung.pgf')

 


Dieser sieht dann auch super aus, wenn ich ihn mir anzeigen lasse. Bild habe ich angefügt.

Wenn ich mir den entsprechenden Code anzeigen lasse sieht dieser so aus:

Code • Öffne in Overleaf
% This file was created by matplotlib2tikz v0.6.14.
\begin{tikzpicture}

\begin{axis}[
xlabel={Zeit (h)},
ylabel={Zeit in \si{\degreeCelsius}},
xmin=6.35836111111111, xmax=7.02997222222222,
ymin=59.95, ymax=60.45,
tick align=outside,
tick pos=left,
xmajorgrids,
x grid style={white!69.019607843137251!black},
ymajorgrids,
y grid style={white!69.019607843137251!black},
legend style={draw=white!80.0!black},
legend cell align={left},
legend entries={{ref},{roh},{kal}}
]
\addlegendimage{no markers, black}
\path [draw=red, fill=red, opacity=0.2] (axis cs:6.38888888888889,62.739)
--(axis cs:6.38888888888889,62.106)
--(axis cs:6.38944444444444,62.119)
--(axis cs:6.39,62.099)
...
--cycle;

\path [draw=blue, fill=blue, opacity=0.2] (axis cs:6.38888888888889,62.5879316853268)
--(axis cs:6.38888888888889,61.9106342850214)
--(axis cs:6.38944444444444,61.9235743705174)
--(axis cs:6.39,61.9176020251081)
...
--(axis cs:6.38944444444444,62.5550997327063)
--(axis cs:6.38888888888889,62.5879316853268)
--cycle;

\addplot [semithick, black]
table {%
6.38888888888889 62.4369057060658
6.38944444444444 62.4070223582104
6.39 62.3791311779396
6.39055555555556 62.3442671274878
...
6.99944444444444 55.1620916186744
};
\end{axis}

\end{tikzpicture}


Ich habe mal ein paar Datenpunkte weggelassen, damit es nicht zu lang wird. In TEX erhalte ich dann allerdings folgendes Bild.

In Tex ist der Code so eingebunden:
Code • Öffne in Overleaf

\begin{figure}
   \centering
   \input{B:/Pr...g/Kalibrierauswertung.pgf}
   \caption{beipsielhafte Kalibriererebnisse}
   \label{G_KaliTemp}
\end{figure}
 


Ich habe dazu 2 Fragen:
- Wieso stimmt die Legende nicht und wie kann ich das ändern?
- Wieso werden die Größenangaben aus python nicht übernommen und wie kann ich das ändern?

Vielleicht noch eine dritte Frage: Sollte es eher ein python Problem sein, weiß jemand an wen ich mich dann wenden kann?

Danke und Gruß,
Axel

tex.png
 Beschreibung:
Darstellung des Exports in Tex

Download
 Dateiname:  tex.png
 Dateigröße:  27.04 KB
 Heruntergeladen:  164 mal
python.png
 Beschreibung:
Grafik mit python erstellt

Download
 Dateiname:  python.png
 Dateigröße:  54.7 KB
 Heruntergeladen:  156 mal
Private Nachricht senden Benutzer-Profile anzeigen

Rolli
Forum-Century
Forum-Century

Beiträge: 175
Anmeldedatum: 15.02.17
Wohnort: Mittelfranken
Version: MikTeX 2.9 64-bit
     Beitrag Verfasst am: 08.02.2018, 21:35     Titel:
  Antworten mit Zitat      
Hallo Axel_S,

bitte erstelle doch ein compilierfähiges InfoMinimalbeispiel.
Deine Beispiele funktionieren leider nicht, wie Du selber feststellen kannst, wenn Du auf das blaue "Öffne im Overleaf" klickst.

Und verzeihe mir meine Frage: Zeitangabe in der Einheit °C ???

Gruß vom Rolli
_________________

Linux ist ein Betriebssystem.
WinDoof ist ein Zustand!
Private Nachricht senden Benutzer-Profile anzeigen

Axel_S
Forum-Newbie
Forum-Newbie

Beiträge: 3
Anmeldedatum: 08.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2018, 08:09     Titel:
  Antworten mit Zitat      
Hallo,

ich habe den Code mal entsprechend vereinfacht und das Ergebniss aus dem python Export direkt in Tex eingefügt.
Code • Öffne in Overleaf
\documentclass[]{article}

\usepackage[utf8
]{inputenc}
\usepackage[T1]{fontenc}          
\usepackage[ngerman]{babel}

\usepackage{siunitx}
\usepackage{graphicx}
\usepackage{subcaption}

\usepackage{pgfplots}
\usepackage{wrapfig}

\usepackage[a4paper, total={6.5in, 9in}]{geometry}

%opening
\title{Titel}
\author{ich}

\begin{document}

\begin{figure}
   \centering
      % This file was created by matplotlib2tikz v0.6.14.
      \begin{tikzpicture}
     
      \begin{axis}[
      xmin=0.95, xmax=2.05,
      ymin=1.85, ymax=5.15,
      tick align=outside,
      tick pos=left,
      xmajorgrids,
      x grid style={white!69.019607843137251!black},
      ymajorgrids,
      y grid style={white!69.019607843137251!black},
      legend style={at={(0.03,0.97)}, anchor=north west, draw=white!80.0!black},
      legend cell align={left},
      legend entries={{ref},{roh},{kal}}
     
]
      \addlegendimage{no markers, black}
      \path [draw=red, fill=red, opacity=0.2] (axis cs:1,3)
      --(axis cs:1,2)
      --(axis cs:2,2)
      --(axis cs:2,3)
      --(axis cs:2,3)
      --(axis cs:1,3)
      --cycle;
     
      \path [draw=blue, fill=blue, opacity=0.2] (axis cs:1,5)
      --(axis cs:1,4)
      --(axis cs:2,4)
      --(axis cs:2,5)
      --(axis cs:2,5)
      --(axis cs:1,5)
      --cycle;
     
      \addplot [semithick, black]
      table {%
         1 2
         2 5
      };
      \end{axis}
     
      \end{tikzpicture}
   \caption{caption}
   \label{G_KaliTemp}
\end{figure}
   

\end{document}
 


Hierzu noch der entsprechende Code aus Python:

Code • Öffne in Overleaf
import matplotlib as mpl
import matplotlib.pyplot as plt

import numpy as np
mpl.style.use('seaborn-colorblind')

from matplotlib2tikz import save as tikz_save

fig = plt.figure(figsize=(7,4))
ax = fig.add_subplot(111)  
ax.fill_between([1, 2],[2, 2],[3, 3],color = 'red',alpha=0.2, label ='roh')
ax.fill_between([1, 2],[4, 4],[5, 5],color = 'blue',alpha=0.2, label ='kal')
ax.plot([1, 2],[2, 5],'k',label='ref')
ax.grid()      
plt.legend()
#plt.show()
tikz_save('minimalbeispiel.pgf')


Das Bild aus python mit richtiger Legende ist wieder im Anhang zu finden.
Ich würde ja fast vermuten, dass es am Export matplotlib2tikz liegt, da Tex den Code ja darstellt und die Größenangaben im Tex-Code auch nicht erzeugt werden. Aber wenn sich damit schonmal jemand befasst hat dann sicherlich die TEXer =)

Viele Grüße,
Axel

Nachtrag: Ja, Zeiten werden nicht in °C angegeben. Aber wenn ich so etwas ausprobiere, ändere ich immer mal ein paar Kleinigkeiten (z.B. lösche ich auch mal einen Buchstaben oder tue sonst was anderes), um zu prüfen ob die Änderungen auch im Tex-pdf angekommen sind. Aber wenn ich das Problem der Legende gelöst habe, werde ich das sicherlich auch noch schaffen. Wink Nur Not kann ich na nochmal nach der richtigen SI Einheit der Zeit fragen Very Happy

minimal_python.png
 Beschreibung:

Download
 Dateiname:  minimal_python.png
 Dateigröße:  20.42 KB
 Heruntergeladen:  131 mal
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2018, 08:25     Titel:
  Antworten mit Zitat      
Mit matplotlib2tikz kenne ich mich nicht aus, aber mit einem ähnlichen Paket für R habe ich mal rumgespielt. Da war es so, dass man die Dimensionen des Bildes für den Export beim Äquivalent von tikz_save explizit angeben musste. https://github.com/nschloe/matplotlib2tikz#usage scheint Ähnliches zu suggerieren. Ich vermute mal, dass matplotlib2tikz die Angaben in plt.figure(figsize=(7,4)) nicht verarbeiten kann und explizite Angaben beim Export benötigt.

Das mit der Legende hingegen sieht mir fast nach einem Problem mit matplotlib2tikz selbst aus. Eventuell solltest Du zuerst die Dokumentation befragen, und wenn Du dann nach einer vernünftigen Wartezeit hier keine Antwort bekommst, mal bei https://github.com/nschloe/matplotlib2tikz/issues nachfragen. Bevor Du da einen Bugreport startest, solltest Du aber die aktuelle Version von GitHub testen, vielleicht ist das Problem ja schon behoben worden. Deine Version v0.6.14 scheint ein paar Tage hinter der aktuellen zu sein https://pypi.python.org/pypi/matplotlib2tikz, https://github.com/nschloe/matplotlib2tikz/releases

Rolli
Forum-Century
Forum-Century

Beiträge: 175
Anmeldedatum: 15.02.17
Wohnort: Mittelfranken
Version: MikTeX 2.9 64-bit
     Beitrag Verfasst am: 09.02.2018, 09:43     Titel:
  Antworten mit Zitat      
Ich kenne mich mit matplotlib2tikz ebenfalls nicht aus. Allerdings fällt mir auf, dass Dein MB eine Warning wirft:

"Package pgfplots Warning: running in backwards compatibility mode (unsuitable t ick labels; missing features). Consider writing \pgfplotsset{compat=1.14} into your preamble. on input line 28."

Wie Gast vorhin schon geschrieben hat: Ich würde zuerst mal auf die aktuelle Version "updaten" - falls es sich um einen Bug handeln sollte, wäre dieser dann evtl. bereits behoben.

Außerdem könnte es ja auch helfen, die o.a. Warnung ernst zu nehmen.

Gruß vom Rolli
_________________

Linux ist ein Betriebssystem.
WinDoof ist ein Zustand!
Private Nachricht senden Benutzer-Profile anzeigen

Axel_S
Forum-Newbie
Forum-Newbie

Beiträge: 3
Anmeldedatum: 08.02.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2018, 06:08     Titel:
  Antworten mit Zitat      
Guten morgen,

das Problem der Größen könnte ich lösen. Da hatte ich einfach den Eintrag übersehen. Ein Update auf die aktuelle Version hat leider keine Lösung gebracht. Die Warnung könnte man mit entsprechendem \pgfplotset{} Eintrag auch beheben. Also scheint es wohl wirklich ein Python Problem zu sein Sad

Mal gucken was man da machen kann...
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de


  Datenschutzerklärung | Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2018 goLaTeX.de