3
1

Hallo,

ich habe zu dem unten gezeigten Quelltext zwei Probleme, bei denen ihr mir sicher helfen könnt. Hier erstmal die Datei:

Open in writeLaTeX
\RequirePackage{filecontents}
\begin{filecontents}{\jobname Data.asc}
0   0.3791
5   0.38189
10  0.40194
15  0.42598
20  0.45846
25  0.50026
30  0.55143
35  0.60285
40  0.66468
42  0.68796
44  0.71025
46  0.73916
48  0.765
50  0.79383
52  0.81881
54  0.84439
56  0.87511
58  0.89835
60  0.9301
62  0.95564
64  0.97691
66  0.99479
68  1
70  0.98994
72  0.96122
74  0.89812
76  0.7904
78  0.64007
80  0.45012
82  0.24865
84  0.08855
86  0.01349
88  1.27E-004
88  1.27E-004
\end{filecontents}
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usepackage{siunitx}
\usepackage{simpsons}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
      xmin=0,xmax=90,
      ymin = -0.05, ymax = 1.3,
      xtick={0, 10,...,80},       
      legend pos = north west,
      axis y line*=left,
      xlabel=Hallo \TeX Welt,
      xlabel near ticks,
      ylabel=Die 1000. Frage! \Burns,
      ylabel near ticks
    ]
\addplot[black,smooth,thick] table [x index = 0, y index = 1] {\jobname Data.asc};\label{1}
\end{axis}

\begin{axis}[
      xmin = 0, xmax = 90,
      ymin = -0.1, ymax = 0.05,  
      legend pos = north west,
      legend columns=2,
      legend style={draw=none},
      hide x axis,
      axis y line*=right,
      ylabel=Die 1000. Frage! \Burns,
      ylabel near ticks
    ]
\addlegendimage{/pgfplots/refstyle=1}\addlegendentry{Daten};
\addplot[raw gnuplot, id=test, mark=none, smooth,thick,dashed,black] gnuplot{ 
    x0=NaN;
    y0=NaN;
    plot [10:50] "\jobname Data.asc" using (dx=$1-x0,x0=$1,$1-dx/2):(dy=$2-y0,y0=$2,dy/dx) with lines  smooth bezier};
\addlegendentry{Ableitung};
\draw (axis cs: 0,0) -- (axis cs: 90,0); 
\end{axis}
\end{tikzpicture}
\end{document}

Folgende zwei Probleme:

  1. Der Plotbereich wird ignoriert, ich habe schon diverse Varianten versucht. Unter anderem ohne raw gnuplot und dafür mit domain 10:50 in dem Fall veschwindet die Ableitung. Bei anderen Varianten wird es ebenfalls ignoriert.

  2. Wie man sieht, befindet sich die Nullstelle der Ableitung nicht genau am Maximum der Funktion. Das ist ja ein numerisches Problem der Berechnung. Gibt es eine Möglichkeit, die Daten alle um einen Wert zu verschieben. Die x-Werte sind nicht äquidistant, also reicht ein einfacher Offset nicht.

Ich danke euch schonmal,

viele Grüße und ein dreifach "Hoch" auf die 1000. Frage! ;-)

gefragt 15 Aug '14, 10:28

jan_lde's gravatar image

jan_lde
1165712
Akzeptiert-Rate: 0%


Ich habe keine Ahnung von gnuplot, aber hier eine nachvollziehbare Erklärung von @Marco gefunden: gnuplot erstellt eine Tabelle mit drei Spalten und in der dritten Spalte findet sich die Information, ob geplottet werden soll oder nicht.

Auszug aus der <\jobname>.test.table

# Curve 0 of 1, 100 points
# Curve title: ""LaTeX2Data.asc" using (dx=$1-x0,x0=$1,$1):(dy=$2-y0,y0=$2,dy/dx)"
# x y type
5.0000000e+000 5.5800000e-004  o
6.5656566e+000 1.5281165e-003  o
8.1313127e+000 2.3276662e-003  o
9.6969599e+000 3.0155137e-003  o
1.1262545e+001 3.6317856e-003  i
1.2827879e+001 4.2027781e-003  i

...

4.8395942e+001 1.2996588e-002  i
4.9058011e+001 1.3062712e-002  i
4.9712262e+001 1.3118271e-002  i
5.0360199e+001 1.3162930e-002  o
5.1003090e+001 1.3196136e-002  o
5.1641988e+001 1.3217047e-002  o

...

Allerdings beachtet pgfplots die dritte Spalte beim Plotten dieser Tabelle nicht, weshalb dann doch der gesamte Bereich dargestellt wird.

Will man den Plotbereich einschränken, kann man aber die Option restrict x to domain=10:50 für den Plot oder die axis Umgebung nutzen.

alt text

Code:

Open in writeLaTeX
%% Daten siehe MWE in Frage 
\documentclass[margin=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usepackage{siunitx}
\usepackage{simpsons}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
      xmin=0,xmax=90,
      ymin = -0.05, ymax = 1.3,
      xtick={0, 10,...,80},       
      legend pos = north west,
      axis y line*=left,
      xlabel=Hallo \TeX Welt,
      xlabel near ticks,
      ylabel=Die 1000. Frage! \Burns,
    ]
\addplot[black,smooth,thick] table [x index = 0, y index = 1] {\jobname Data.asc};\label{1}
\end{axis}

\begin{axis}[
      xmin = 0, xmax = 90,
      ymin = -0.1, ymax = 0.05,  
      legend pos = north west,
      legend columns=2,
      legend style={draw=none},
      hide x axis,
      axis y line*=right,
      ylabel=Die 1000. Frage! \Burns,
      ylabel near ticks,
    ]
\addlegendimage{/pgfplots/refstyle=1}\addlegendentry{Daten};
\addplot[raw gnuplot, id=test, mark=none, smooth,thick,dashed,black,
  restrict x to domain=10:50 % Einschränkung des Plotbereiches
] gnuplot{ 
    x0=NaN;
    y0=NaN;
    plot [10:50] "\jobname Data.asc" using (dx=$1-x0,x0=$1,$1-dx/2):(dy=$2-y0,y0=$2,dy/dx) with lines  smooth bezier};
\addlegendentry{Ableitung};
\draw (axis cs: 0,0) -- (axis cs: 90,0); 
\end{axis}
\end{tikzpicture}
\end{document}

Den zweiten Teil der Frage verstehe ich nicht so ganz. Die Verschiebung zwischen Nullstelle der Ableitung und Maximum der Daten entsteht durch das Glätten der Ableitung. Sie ist vernachlässigbar, wenn man smooth bezier weglässt, aber dafür wird die Ableitungskurve dann teilweise sehr holprig. Für den optischen Eindruck hilft es vielleicht, wenn Du im Plot der Ableitung $1+dx/2 statt $1-dx/2 verwendest.

alt text

Open in writeLaTeX
\addplot[raw gnuplot, id=test, mark=none, smooth,thick,dashed,black,
  %restrict x to domain=10:50 % Einschränkung des Plotbereiches
] gnuplot{ 
    x0=NaN;
    y0=NaN;
    plot [10:50] "\jobname Data.asc" using (dx=$1-x0,x0=$1,$1+dx/2):(dy=$2-y0,y0=$2,dy/dx) with lines  smooth bezier};
\addlegendentry{Ableitung};
Permanenter link

beantwortet 15 Aug '14, 18:19

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

Erst jetzt wird mir klar, daß hier das simpsons-Paket (m.W. von 1994, METAFONT) verwendet wurde - ich faß es nicht ^^ Habt ihr das alle installiert, ja? Und ich wurde seinerzeit verhöhnt, als ich fragte, wie man das installiert :()

(15 Aug '14, 20:08) cis

@cis Bei MiKTeX ist das Paket einfach dabei ;-)

(15 Aug '14, 21:22) esdd
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:

×731
×298
×11

gestellte Frage: 15 Aug '14, 10:28

Frage wurde gesehen: 18,776 Mal

zuletzt geändert: 15 Aug '14, 21:22