pgfplots: segundo eixo com escala diferente/ x coord trafo

pgfplots: segundo eixo com escala diferente/ x coord trafo

Estou tentando fabricar um chamadoTrama de Arrheniusem pgfplots. Basicamente, é um gráfico semilogarítmico (eixo y) onde uma função dependente da temperatura é plotada em relação a 1/kB*T (sendo kB oConstante de Boltzmann) Isso funciona até agora, mas por exemplo, 1600°C corresponde a aproximadamente 6,2 1/eV (recíprocoelétron-volt)

Cientificamente isso está correto, mas ninguém pode dar um significado físico a esse número (não posso definir meu forno para 6,2 1/eV ou em uma palestra, onde os slides ficam visíveis apenas por alguns segundos, isso pode confundir o ouvinte). Então eu queria colocar um segundo eixo x no gráfico mostrando a temperatura em graus Celsius. Pensei na capacidade do pgfplots de transformar as coordenadas, mas não consegui resolver.

Abaixo está um MWE do que tentei. Deve haver algum erro no meu processo de pensamento sobre a transformação de coordenadas, mas não consigo descobrir. Os pontos finais do gráfico coincidem, mas no meio o mapeamento está ligeiramente errado. Alguém pode sugerir como corrigir isso?

\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}

A tabela contém dados fictícios, que são calculados: T é fornecido, kB é calculado a partir de 1/kB*T e k é uma constante de taxa imaginária calculada a partir de uma equação de Arrhenius.

Responder1

Não é 100% o que você está procurando, mas pelo menos é algo que eusaberestá certo. Acho que você mesmo poderá fazer as modificações necessárias a partir daqui.

% 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}

imagem mostrando o resultado do código acima

informação relacionada