Рисование линии наилучшего на полулогическом графике и показ ее уравнения

Рисование линии наилучшего на полулогическом графике и показ ее уравнения

У меня есть некоторые данные, которые связаны между собой отношением. 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}

Выход:

выход

Связанный контент