
Quero plotar alguns dados usando o pgfplot. Aqui está um código que escrevi:
\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}
O conteúdo do arquivo Data.dat é o seguinte:
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 sou novo neste site, não consigo postar o gráfico de saída. No gráfico de saída, o último ponto (17791, 45,35) é plotado incorretamente em x=18 ey=45,35.
Então minha pergunta é: Como faço para que o último ponto seja plotado corretamente entre os pontos x=16 e x=18?
Responder1
O ponto é traçado precisamente em x=17.791
, y=45.35
; o problema é que o rótulo usado para o último tick está errado (você declarou manualmente como 18 e isso substitui o valor padrão de 17.8
); o problema não é a plotagem: o problema é a maneira como você coloca os x rótulos (especificamente o último).
No exemplo a seguir mostro uma maneira possível de corrigir a situação: deixei xtick=data
(agora os ticks e seus rótulos são automaticamente escolhidos da tabela) e usei extra x ticks
e extra xtick labels
com uma grade azul auxiliar apenas para mostrar onde realmente está o ponto correspondente a 18 ; Também alterei a marca utilizada (a marca que você usou é muito grande, na minha opinião, e pode dar a impressão de estar localizada em x=18
) e também usei uma cor diferente apenas para fins de visualização. Como você pode ver, a coordenada x do último ponto está exatamente onde deveria estar (um pouco à esquerda da linha vertical vermelha desenhada 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}
Você pode usar uma 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}