Hallo! Und wieder einmal ein Plotproblem, bei dem ich nicht mehr weiter weiß. Ich habe einen plot mit zwei Ordinaten, bei dem einer der Legendeeinträge nicht mit der Markierung im plot übereinstimmt.

Hier mal ein Minimalbeispiel bei dem bei mir der Fehler auftritt.

Open in Online-Editor
\documentclass[11pt,a4paper,oneside,chapterprefix,numbers=enddot]{scrbook}

\usepackage{siunitx}                        
\usepackage{graphicx}                       
\usepackage[ngerman]{babel}                 
\usepackage[]{acronym}                      
\usepackage{pgfplots,siunitx}               
\pgfplotsset{width=\textwidth, height = 0.4\textheight,compat=newest, legend style={cells={anchor=west}},every axis legend/.append style={at={(0.99,0.99)},anchor=north east}, ticklabel shift={0.05cm}}
\usepgfplotslibrary{external}
\tikzexternalize[prefix=figures/]{Diplomarbeit}

\begin{document}

\tikzsetnextfilename{BF+WA-sTE+KFsNoLI90}
\begin{figure}[htb]
\centering
\tikzset{every mark/.append style = {scale = 2}}
\begin{tikzpicture}
    \begin{axis}[grid = major, width = \textwidth-45pt, height = 0.4\textheight,
                xlabel near ticks,
                ylabel near ticks,
                xlabel = x,
                ylabel = y1,
                xtick = {1,2,3,4,5},
                ytick = {50,54,58,62,66,70},
                ymin = 50, ymax = 70,
                x tick label style={/pgf/number format/1000 sep=},
                ]
        \addplot[only marks,mark = asterisk]
            coordinates {(1,66.90)(2,55.00)(3,56.18)(4,57.99)(5,55.00)};
        \label{plot1}
    \end{axis}

    \begin{axis}[ylabel near ticks, width = \textwidth-45pt, height = 0.4\textheight,
                yticklabel pos=right,
                ylabel = y2,
                ytick = {0,0.04,0.08,0.12,0.16,0.20},
                ymin=0, ymax=0.20,
                xtick = {1,2,3,4,5},
                x tick label style={/pgf/number format/1000 sep=},
                yticklabel style={/pgf/number format/fixed, /pgf/number format/precision=2},
                legend pos=south east,
                ]
        \addlegendimage{/pgfplots/refstyle=plot1}\addlegendentry{y1}
        \addplot[only marks, mark = triangle]
            coordinates {(1,0.08)(2,0.09)(3,0.09)(4,0.18)(5,0.10)};
        \addlegendentry{y2}
    \end{axis}
\end{tikzpicture}
    \caption{}
    \end{figure}

\end{document}

Bei mir erscheint anstelle des Stern-Symbols ein einfacher Strich. Ich habe um zu schauen, ob es an meinem plot liegen kann, einfach mal einen Code, der ähnlich strukturiert ist, aus dem Netz in meine Datei kopiert und es tritt derselbe Fehler auf.

Danke schon mal für die Hilfe!

gefragt 02 Aug '14, 15:02

Volker%20Racho's gravatar image

Volker Racho
1654612
Akzeptiert-Rate: 100%

bearbeitet 23 Mär '16, 17:19

saputello's gravatar image

saputello
11.1k174365

Zweimal übersetzen könnte das korrigieren, was beim Externalisieren wohl nicht geschehen ist. Teste mal mit doppelt übersetzen (ggf. ohne extzernalize).

(02 Aug '14, 15:24) stefan ♦♦

Nehme ich die Externalisierung raus, klappt es direkt beim ersten kompilieren. nehme ich sie nach mehrmaligem kompilieren wieder rein, erhalte ich wieder diesen Fehler.

(02 Aug '14, 15:28) Volker Racho

Ich tippe mal drauf, dass es wegen des Referenzierens (refstyle) nicht beim einmaligen Übersetzen/externalize klappt. Evtl. ohne Referenz Stil angeben?

(02 Aug '14, 15:41) stefan ♦♦

hab ich auch schon versucht...ohne Erfolg

(02 Aug '14, 15:43) Volker Racho

Eine Richtung haben wir ja schonmal. Vllt. kommt noch jemand hierher mit dem entscheidenden Tipp, ich komme später nochmal dazu.

(02 Aug '14, 15:48) stefan ♦♦

Super! Würde ungern auf die Externalisierung verzichten.

(02 Aug '14, 15:50) Volker Racho

Sowohl im pgfmanual also auch in pgfplots.pdf steht bei der Beschreibung der Externalisierung ein langer Abschnitt über "Support for Labels and References In External Files".

(02 Aug '14, 16:57) Ulrike Fischer

Danke für die Info Ulrike. Dies ist mir beim unzähligen durchsuchen des manuals nicht aufgefallen. Ich vermute allerdings, dass dies daran liegt, dass ich auch mehrmaligem Lesen nicht wirklich weiß, was ich genau tun muss.

(02 Aug '14, 18:01) Volker Racho

Im wesentlichen heißt das, dass die Referenzen nur dann funktionieren, wenn du die Bilder extern z.B. durch Aufruf des makefile erzeugt. Der simple pdflatex --shell-escape-Weg geht nicht, weil da die zwei nötigen Aufrufe nicht gemacht werden können (warum nicht habe ich nicht untersucht, aber ich nehme an, Christian weiß schon, was er tut).

(02 Aug '14, 18:48) Ulrike Fischer

Davon ist auszugehen ;-) Ich denke, dass ich morgen mal etwas basteln werde. Egal wie es läuft, ich werde es auf jeden Fall hier posten!

(02 Aug '14, 20:36) Volker Racho
Ergebnis 5 von 10 show 5 more comments

Das ist entweder ein bug oder zumindest eine Schwaeche in der External lib.

Ich schreibe das als bug report fuer die Bibliothek auf, vielleicht kann ich es beheben.


Details:

Wie schon in den Kommentaren richtig vermutet, hat es etwas mit mehrfachausfuehrung und Externalisierung zu tun.

Hier etwas genauer: ohne externalisierung klappt es erst nach dem zweiten Kompile vorgang, d.h. nach

Open in writeLaTeX
pdflatex Diplomarbeit
pdflatex Diplomarbeit

Mit externalisierung ist das ganz aehnlich - das Bild muss zweimal uebersetzt werden. Genauer:

Open in writeLaTeX
pdflatex -shell-escape Diplomarbeit
pdflatex -shell-escape Diplomarbeit

schlaegt fehl (denn das Bild wurde nur einmal waehrend des ersten vorgangs externalisiert und wird danach nicht mehr gelesen).

Wenn man aber

Open in writeLaTeX
pdflatex -shell-escape Diplomarbeit
pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "BF+WA-sTE+KFsNoLI90" "\def\tikzexternalrealjob{Diplomarbeit}\input{Diplomarbeit}"
pdflatex -shell-escape Diplomarbeit

eingibt, klappt es. Der kryptische Befehl stammt dabei aus dem LaTeX .log file, da steht naemlich

Open in writeLaTeX
===== 'mode=convert with system call': Invoking 'pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "BF+WA-sTE+KFsNoLI90" "\def\tikzexternalrealjob{Diplomarbeit}\input{Diplomarbeit}"' ========
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013)

Vermutlich sollte das Bild zweimal externalisiert werden.

Falls Du Linux verwendest, koennte

Open in writeLaTeX
\tikzexternalize[mode=list and make]

helfen. Dann muesstest Du es mit

Open in writeLaTeX
pdflatex Diplomarbeit
make -f Diplomarbeit.makefile
make -f Diplomarbeit.makefile
pdflatex Diplomarbeit

uebersetzen. Interessanterweise bekommt der naemlich mit, dass die Referenzen nicht ordentlich gesetzt sind.

Ich denke, die external lib sollte auch fuer den standardmodus pruefen, ob Referenzen noch zu beheben sind und ggf. neu externalisieren...

Fuer diesen konkreten Fall koennte man auch ueberlegen, warum man fuer eine Vorwaertsreferenz denn ueberhaupt zweimal kompilieren muss.


Achtung: Nicht-verwandte Best-practise:

Beim Bearbeiten Deines Codes ist mir aufgefallen, dass Du

Open in writeLaTeX
\tikzexternalize[prefix=figures/]{Diplomarbeit}

schreibst. Damit hast Du den Namen der Hauptdatei explizit nochmal in der Hauptdatei referenziert; wenn Du jemals mal die Datei als Vorlage fuer eine Neue nehmen willst, beisst Dich das. Leider war das so in der ersten Version der external lib notwendig; mitlerweile kannst Du aber einfach

Open in writeLaTeX
\tikzexternalize[prefix=figures/]

schreiben, und es funktioniert unabhaengig vom Namen der Hauptdatei richtig. Letzteres ist deshalb zu verwenden.

Permanenter link

beantwortet 02 Aug '14, 22:05

cfeuersaenger's gravatar image

cfeuersaenger
3.7k23
Akzeptiert-Rate: 34%

bearbeitet 02 Aug '14, 22:09

Danke für die Antwort. Du schreibst oben etwas von Eingabe. Du meinst doch, dass ich dies in der Eingabeaufforderung eingeben muss. Das habe ich nun gemacht. Soweit ich das sehe, sind das drei Schritte. Nach dem ich diese durchgeführt habe, hat sich allerdings nichts geändert. Ich verwende Windows. Genauer Win7 64.

(03 Aug '14, 10:31) Volker Racho

Also ich habe nun damit es funktioniert auf die Externalisierung verzichtet. Allerdings macht das den Kompilierungsvorgang relativ langsam. Schade drum, aber ich weiß leider nicht, was ich in der Konfiguaration noch ändern soll. Danke trotzdem für die Hilfe.

(05 Aug '14, 10:15) Volker Racho

Ja, das ist schon sehr aergerlich :-( Du kannst uebrigens \tikzset{external/export next=false} vor die fragliche abbildung stellen - dann werden immerhin noch alle anderen gemacht. Es ginge vielleicht auch, dass Du vor die Abbildung \tikzset{external/remake next} schreibst - dann wird die eine immer erstellt. Sobald sie einmal gut ist, koenntest Du das auskommentieren...

(05 Aug '14, 12:40) cfeuersaenger

Diese Variante werde ich anwenden. Klappt einwandfrei und kompiliert ist es auch wieder schnell. Danke Christian!

(05 Aug '14, 16:22) Volker Racho
1

@cfeuersaenger: Ich habe in meiner Antwort auf die Frage Labels in pgfplots eine automatisierte Lösung für das Problem gezeigt. Dazu muss ich external patchen. Vielleicht könnte man so etwas auch direkt in die Library einbauen?

(26 Sep '14, 10:44) gast3

@Ijon Tichy danke fuer den Hinweis! Ich habe mir das auf meiner Todo liste vermerkt in der Hoffnung, dass wenn ich etwas mehr Ruhe habe aufzugreifen. Allerdings stehen aktuell noch einige andere unfertige Dinge und supportanfragen davor an.

(01 Okt '14, 21:08) cfeuersaenger
Ergebnis 5 von 6 show 1 more comments
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×298
×11
×5

gestellte Frage: 02 Aug '14, 15:02

Frage wurde gesehen: 15,067 Mal

zuletzt geändert: 23 Mär '16, 17:19