세미로지 그래프에 가장 좋은 선을 그리고 그 방정식을 보여줍니다.

세미로지 그래프에 가장 좋은 선을 그리고 그 방정식을 보여줍니다.

y = B*exp(Cx) 나는 데이터를 플롯하고 관계에서 값을 결정할 수 있기를 원하는 관계와 관련된 일부 데이터를 가지고 있습니다 .ln(y) = ln(B) + Cx

x및 의 원시 데이터 값이 있습니다 y. 나는 그것들을 플롯하고 그래프에 가장 적합한 선을 그리고 또한 가장 적합한 선의 방정식을 표시하여 y 절편을 결정하고 ln(B)결과적으로 결정하고 싶습니다.B

지금까지 나는 이것을 가지고 있습니다

\begin{document}
\begin{tikzpicture}
    \begin{semilogyaxis}
        \addplot table[x={x}, y={y}] {
        x      y
        0.284  0.01
        0.433  0.59
        0.485  2.97
        0.500  3.96
        0.531  9.48
        0.558  18.00
        0.597  45.00
        0.621  94.00
        0.696  1136.00
        };
    \end{semilogyaxis}
\end{tikzpicture}
\end{document}

로그 10 그래프에서는 내가 원하는 대로 자연 로그가 아니지만 데이터를 플롯합니다.

나는 시도했다

\addplot table[x={x}, y={create col/linear regression={y=y}}] {data.dat};

그러나 아무 소용이 없습니다.

최신 버전의 pgf 플롯을 사용하고 있으며 세미로그 축이 아닌 경우 회귀선이 작동합니다.

답변1

문제는 서문에 로드하지 않은 패키지에 있는 것 같습니다. 귀하의 예를 (기본적으로 축어적으로) 취하고 적절한 패키지를 추가하는 것이 저에게 효과적입니다.

방정식과 관련하여 \pgfplotstableregressiona및 를 통해 액세스할 수 \pgfplotstableregressionb있으며 숫자를 구문 분석하여 간단히 a x + b변환 할 수 있습니다. A e^{B x}이 항목은 항상 기록되므로 계산을 완료하자마자 \pgfmathresult기록하는 이유입니다 . \fitb대신 다음과 같은 경우:

\pgfmathparse{exp(\pgfplotstableregressionb)}
\addlegendentry{Fit: \(\pgfmathresult e^{\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x}\)}

\pgfmathresult그러면 지수화 결과가 여전히 포함된다는 보장이 없습니다 . 실제로는 그렇지 않다는 것을 알게 될 것입니다.

전체 예는 다음과 같습니다.

\documentclass[tikz]{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.13}

\begin{filecontents*}{data.dat}
  x      y
  0.284  0.01
  0.433  0.59
  0.485  2.97
  0.500  3.96
  0.531  9.48
  0.558  18.00
  0.597  45.00
  0.621  94.00
  0.696  1136.00
\end{filecontents*}

\begin{document}
\begin{tikzpicture}
  \begin{semilogyaxis}[
        legend pos=outer north east,
      ]
    \addplot table[x={x}, y={y}] {data.dat};
    \addlegendentry{Data}
    \addplot table[x={x}, y={create col/linear regression={y=y}}] {data.dat};
    \pgfset{/pgf/fpu=true}
    \pgfmathparse{exp(\pgfplotstableregressionb)}
    \pgfmathprintnumberto{\pgfmathresult}{\fitb}
    \addlegendentry{Fit: \(\fitb e^{\pgfmathprintnumber{\pgfplotstableregressiona} \cdot x}\)}
    \pgfset{/pgf/fpu=false}
  \end{semilogyaxis}
\end{tikzpicture}
\end{document}

산출:

산출

관련 정보