
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 ticks
y extra xtick labels
con 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}
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}