Нарисуйте внешнюю ось с помощью pgfplots

Нарисуйте внешнюю ось с помощью pgfplots

У меня есть следующая диаграмма, и я хотел бы продлить красную линию так, чтобы она пересекала оси и немного уходила в начало и конец, как на второй картинке, но я хотел бы, чтобы красные и синие точки все еще были выровнены по вертикали. Кроме того, удлиненная красная линия должна заканчиваться выше верхней оси.

Что у меня есть

Что я хочу

\documentclass{article}
\usepackage{pgf}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}

\begin{figure} [tb]%
  \centering
  \begin{tikzpicture}
    \begin{semilogxaxis}[
      enlarge y limits=true,
      enlarge x limits=false]
      \addplot[very thick,draw=blue!70, mark=*,mark options={color=blue!70}]  coordinates
      {(229,62) (1475,122) (23598,255) (27101,272) (32427,280) (55124,322) (758667,5509) (1273808,5649) (1406902,6375)};
    \end{semilogxaxis}
    \begin{semilogxaxis}[
      smooth,
      axis y line=none,
      axis x line=none,
      ticks=none,
      enlarge y limits=true,
      enlarge x limits=false]
      \addplot[very thick,draw=red!70] expression[domain=229:1406902] {x};
      \addplot[draw=none,mark=*,mark options={color=red!70}]  coordinates
      {(229,229) (1475,1475) (23598,23598) (27101,27101) (32427,32427) (55124,55124) (758667,758667) (1273808,1273808) (1406902,1406902)};
    \end{semilogxaxis}
  \end{tikzpicture}
  \caption{Caption}
\end{figure}
\end{document}

Я пробовал менять ширину и высоту второй полулогарифмической оси, а также изменять область определения кривой внутри, но тогда мне не удаётся выровнять точки по вертикали.

Я также пытался использовать \draw[domain=0:2000000,smooth,variable=\x] plot (axis cs:\x,\x);, но тогда я получаю Dimension too largeошибку, и мне не удаётся заставить tikz \draw plotиспользовать FPU (блок вычислений с плавающей точкой).

решение1

Вы можете продолжать рисовать после построения и использовать специальные координаты current plot end/begin. Размещая фиктивные координаты очень близко к концу и началу, вы можете имитировать касательную аппроксимацию. Но вам придется отключить поведение обрезки осей. СмотритеИзменить стиль линии на графике, чтобы добавить пунктирную линию тренда?для аналогичного решения с формой узла, которая может быть лучше в некоторых случаях, если сюжет не слишком необычный.

\documentclass{article}
%\usepackage{pgf}
%\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\begin{document}

\begin{figure} [tb]%
  \centering
  \begin{tikzpicture}
    \begin{semilogxaxis}[
      enlarge y limits=true,clip=false,
      enlarge x limits=false]
      \addplot[very thick,draw=blue!70, mark=*,mark options={color=blue!70}]  coordinates
      {(229,62) (1475,122) (23598,255) (27101,272) (32427,280) (55124,322) (758667,5509) (1273808,5649) (1406902,6375)};
    \end{semilogxaxis}
    \begin{semilogxaxis}[
      smooth,clip=false,
      axis y line=none,
      axis x line=none,
      ticks=none,
      enlarge y limits=true,
      enlarge x limits=false]
      \addplot[very thick,draw=red!70] expression[domain=229:1406902] {x} 
    coordinate [pos=0.98] (c2) coordinate [pos=0.01] (c3) (current plot end) -- ($(c2)!10!(current plot end)$) 
    (current plot begin) -- ($(c3)!1.2!(current plot begin)$);
      \addplot[draw=none,mark=*,mark options={color=red!70}]  coordinates
      {(229,229) (1475,1475) (23598,23598) (27101,27101) (32427,32427) (55124,55124) (758667,758667) (1273808,1273808) (1406902,1406902)};
    \end{semilogxaxis}
  \end{tikzpicture}
  \caption{Caption}
\end{figure}
\end{document}

введите описание изображения здесь

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