pgfplots: zweite Achse mit anderer Skalierung/ x-Koordinate Trafo

pgfplots: zweite Achse mit anderer Skalierung/ x-Koordinate Trafo

Ich versuche, eine sogenannteArrhenius-Diagrammin pgfplots. Im Grunde handelt es sich um ein halblogarithmisches (y-Achsen-)Diagramm, in dem eine temperaturabhängige Funktion gegen 1/kB*T aufgetragen wird (kB ist dieBoltzmann-Konstante) Das funktioniert bisher, aber z.B. entsprechen 1600°C etwa 6,2 1/eV (KehrwertElektronenvolt)

Wissenschaftlich gesehen ist das richtig, aber niemand kann dieser Zahl eine physikalische Bedeutung zuordnen (ich kann meinen Ofen nicht auf 6,2 1/eV einstellen, und bei einem Vortrag, bei dem die Folien nur für ein paar Sekunden sichtbar sind, könnte das den Zuhörer verwirren). Deshalb wollte ich dem Diagramm eine zweite x-Achse hinzufügen, die die Temperatur in Grad Celsius anzeigt. Ich habe an die Fähigkeit von pgfplots gedacht, die Koordinaten zu transformieren, aber ich bekomme das Problem nicht gelöst.

Unten ist ein MWE von dem, was ich versucht habe. Es muss ein Denkfehler in meinem Denkprozess bezüglich der Koordinatentransformation vorliegen, aber ich komme nicht dahinter. Die Endpunkte des Diagramms stimmen überein, aber dazwischen ist die Abbildung leicht verschoben. Kann jemand vorschlagen, wie man das korrigiert?

\documentclass[tikz=true]{standalone}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{mathptmx}
\usepackage{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture}
\begin{semilogyaxis}[
axis x line* = top,
axis y line* = left,
xlabel={$\frac{1}{k_B \cdot T} / \si[per-mode=reciprocal]{\per\electronvolt}$},
ylabel={$k$},
]
\addplot+[x = kb, y = k] table { 
    kb      T       k
    7.61876 1250    3.98E-17
    7.37661 1300    1.68E-17
    7.23857 1330    1.00E-17
    7.14938 1350    7.09E-18
    7.10560 1360    5.97E-18
    7.06236 1370    5.03E-18
    7.01964 1380    4.23E-18
    6.97743 1390    3.56E-18
    6.93573 1400    3.00E-18
    6.89452 1410    2.52E-18
    6.85380 1420    2.12E-18
    6.83362 1425    1.95E-18
    6.77379 1440    1.50E-18
    6.69562 1460    1.07E-18
    6.61924 1480    7.55E-19
    6.54458 1500    5.35E-19
    6.45359 1525    3.48E-19
    6.36509 1550    2.26E-19
    6.19519 1600    9.54E-20
    };
\end{semilogyaxis}

% % extra x axis
\begin{semilogyaxis}[
    x dir = reverse,
    axis y line* = right,
    axis x line* = bottom,
    xlabel={$T / \si{\celsius}$},
    x coord trafo/.code={\pgfmathparse{(1/(#1*8.617333262145E-05)-273.15)}},
    ]
\addplot+[x = T, y = k] table { 
    kb      T       k
    7.61876 1250    3.98E-17
    7.37661 1300    1.68E-17
    7.23857 1330    1.00E-17
    7.14938 1350    7.09E-18
    7.10560 1360    5.97E-18
    7.06236 1370    5.03E-18
    7.01964 1380    4.23E-18
    6.97743 1390    3.56E-18
    6.93573 1400    3.00E-18
    6.89452 1410    2.52E-18
    6.85380 1420    2.12E-18
    6.83362 1425    1.95E-18
    6.77379 1440    1.50E-18
    6.69562 1460    1.07E-18
    6.61924 1480    7.55E-19
    6.54458 1500    5.35E-19
    6.45359 1525    3.48E-19
    6.36509 1550    2.26E-19
    6.19519 1600    9.54E-20
    };
    \end{semilogyaxis}
%
\end{tikzpicture}
\end{document}

Die Tabelle enthält berechnete Dummy-Daten: T ist gegeben, kB wird aus 1/kB*T berechnet und k ist eine imaginäre Geschwindigkeitskonstante, die aus einer Arrhenius-Gleichung berechnet wird.

Antwort1

Nicht 100% das, was Sie suchen, aber das ist zumindest etwas, was ichwissenist richtig. Ich denke, Sie können die erforderlichen Änderungen von hier aus selbst vornehmen.

% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{xfp}        % <-- needed for accuracy
\usepackage{siunitx}
\usepackage{pgfplotstable}
    \pgfplotsset{compat=1.16}
    \pgfplotstableread{
        kb      T       k
        7.61876 1250    3.98E-17
        7.37661 1300    1.68E-17
        7.23857 1330    1.00E-17
        7.14938 1350    7.09E-18
        7.10560 1360    5.97E-18
        7.06236 1370    5.03E-18
        7.01964 1380    4.23E-18
        6.97743 1390    3.56E-18
        6.93573 1400    3.00E-18
        6.89452 1410    2.52E-18
        6.85380 1420    2.12E-18
        6.83362 1425    1.95E-18
        6.77379 1440    1.50E-18
        6.69562 1460    1.07E-18
        6.61924 1480    7.55E-19
        6.54458 1500    5.35E-19
        6.45359 1525    3.48E-19
        6.36509 1550    2.26E-19
        6.19519 1600    9.54E-20
    }{\data}
\begin{document}
\begin{tikzpicture}
    \begin{semilogyaxis}[
        axis lines*=left,
        xlabel={$\frac{\SI{1000}{\kelvin}}{T}$},
        ylabel={$k$},
    ]
        % please note that table options have to be given *after* the
        % table keyword. Otherwise they will not be applied
        \addplot table [
            x expr={1000/\thisrow{T}},
            y=k,
        ] {\data};
    \end{semilogyaxis}

    % extra x axis
    \begin{semilogyaxis}[
        axis lines*=right,
        xlabel={$T / \si{\kelvin}$},
        % avoid scaling (to avoid unexpected result)
        scaled ticks=false,
        % state values which should be shown on axis
        xtick={1250,1300,1350,1400,1500,1600},
        % perform coordinate transformation
        % to ensure right results (accuracy), use the `\fpeval` command
        % from the `xfp` package
        % (compare results when not using it. This will be way off for high T)
        x coord trafo/.code={\pgfmathparse{\fpeval{1/(#1)}}},
        x coord inv trafo/.code={\pgfmathparse{\fpeval{1/(#1)}}},
    ]
        \addplot+ [red] table [
            x=T,
            y=k,
        ] {\data};
    \end{semilogyaxis}
\end{tikzpicture}
\end{document}

Bild, das das Ergebnis des obigen Codes zeigt

verwandte Informationen