소위 말하는 걸 만들려고 해요아레니우스 플롯pgfplots에서. 기본적으로 온도 의존 함수가 1/kB*T(kB는볼츠만 상수) 이것은 지금까지는 작동하지만 예를 들어 1600°C는 대략 6.2 1/eV(역수)에 해당합니다.전자 볼트)
과학적으로는 맞지만 누구도 그 숫자에 물리적인 의미를 부여할 수 없습니다(저는 퍼니스를 6.2 1/eV로 설정할 수 없으며 슬라이드가 몇 초 동안만 표시되는 강연에서는 듣는 사람에게 혼란을 줄 수 있습니다). 그래서 저는 온도를 섭씨 단위로 표시하는 플롯에 두 번째 x축을 추가하고 싶었습니다. 좌표를 변환하는 pgfplots 기능을 생각했지만 해결되지 않았습니다.
아래에는 내가 시도한 MWE가 있습니다. 좌표변환에 대한 제 사고과정에 뭔가 착오가 있는 것 같은데 알 수가 없네요. 플롯의 끝점은 일치하지만 매핑 사이에서 약간 벗어났습니다. 누구든지 이 문제를 해결하는 방법을 제안할 수 있습니까?
\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}
테이블은 계산된 더미 데이터입니다. T가 주어지고 kB는 1/kB*T에서 계산되며 k는 Arrhenius 방정식에서 계산된 가상 속도 상수입니다.
답변1
당신이 찾고 있는 것이 100%는 아니지만 적어도 제가 원하는 것입니다.알다 맞습니다. 여기에서 필요한 수정 작업을 직접 수행할 수 있을 것 같습니다.
% 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}