¿Cómo trazar coordenadas entre dos xticks?

¿Cómo trazar coordenadas entre dos xticks?

Quiero trazar algunos datos usando pgfplot. Aquí hay un código que he escrito:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.3}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
  legend style={legend pos = north west, font=\footnotesize, draw=none},
  legend cell align=left,
  xtick=data,
  ytick={0,5,10,...,45},
  xticklabels={0,2,4,...,16,18},
  every axis label={font=\footnotesize},
  tick label style={font=\footnotesize},
  label style={font=\footnotesize},
  enlarge x limits=false,
  enlarge y limits=false]
  \addplot[lightgray, mark=*] table [x expr = \lineno, y = Time] {Data.dat};
  \addlegendentry{x}
  \end{axis}
\end{tikzpicture}
\end{document}

El contenido del archivo Data.dat es el siguiente:

 Points Time
   0        0
   2000     1.11
   4000     3.54
   6000     7.35
   8000     12.43
   10000    18.15
   12000    24.51
   14000    31.52
   16000    38.59
   17791    45.35

Como soy nuevo en este sitio, no puedo publicar el gráfico de salida. En el gráfico de salida, el último punto (17791, 45,35) está trazado incorrectamente en x=18 e y=45,35.
Entonces mi pregunta es: ¿Cómo puedo trazar correctamente el último punto entre los puntos x=16 y x=18?

Respuesta1

El punto se traza precisamente en x=17.791, y=45.35; el problema es que la etiqueta utilizada para el último tick es incorrecta (usted declaró manualmente que era 18 y esto anula el valor predeterminado de 17.8); el problema no es el trazado: el problema es la forma en que colocas las etiquetas x (específicamente la última).

En el siguiente ejemplo muestro una posible forma de corregir la situación: dejo xtick=data(así que ahora los ticks y sus etiquetas se seleccionan automáticamente de la tabla) y uso extra x ticksy extra xtick labelscon una cuadrícula azul auxiliar solo para mostrar dónde está realmente el punto correspondiente a 18. ; También cambié la marca utilizada (la marca que usaste es demasiado grande, en mi opinión, y podría producir la impresión de estar ubicada en x=18) y también usé un color diferente solo para fines de visualización. Como puedes ver, la coordenada x para el último punto está justo donde debería estar (un poco a la izquierda de la línea vertical roja dibujada para x=18):

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.3}
\begin{document}
\begin{tikzpicture}[scale=1.2]
\begin{axis}[
  xmax=18500,
  legend style={legend pos = north west, font=\footnotesize, draw=none},
  legend cell align=left,
  xtick=data,
   ytick={0,5,10,...,45},
   extra x ticks={18000},
   extra x tick labels={},
   extra x tick style={grid=major,tick label style={rotate=90,anchor=east}},
   major grid style={color=red},
   every axis label={font=\footnotesize},
   tick label style={font=\footnotesize},
  label style={font=\footnotesize},
  enlarge x limits=false,
  enlarge y limits=false,
  scaled x ticks=base 10:-3
]
  \addplot[blue, mark=x] table  {Data.dat};
  \addlegendentry{x}
  \end{axis}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Puede utilizar una lista explícita para xmark:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.3}
\begin{document}
\begin{tikzpicture}[scale=1.2]
\begin{axis}[
  xmax=18500,
  ymax=46,
  legend style={legend pos = north west, font=\footnotesize, draw=none},
  legend cell align=left,
   xtick={0,2000,4000,6000,8000,...,14000,16000,18000},
   ytick={0,5,10,...,45},
  major grid style={color=red},
  every axis label={font=\footnotesize},
  tick label style={font=\footnotesize},
  label style={font=\footnotesize},
  enlarge x limits=false,
  enlarge y limits=false,
  scaled x ticks=base 10:-3
]
  \addplot[blue, mark=x] table  {Data.dat};
  \addlegendentry{x}
  \end{axis}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada