
Я хочу построить график данных с помощью pgfplot. Вот код, который я написал:
\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}
Содержимое файла Data.dat следующее:
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
Так как я новичок на этом сайте, я не могу разместить выходной график. На выходном графике последняя точка (17791, 45.35) неправильно нанесена на x=18 и y=45.35.
Поэтому мой вопрос: как мне сделать так, чтобы последняя точка была нанесена правильно между точками x=16 и x=18?
решение1
Точка нанесена точно на график x=17.791
, y=45.35
; проблема в том, что метка, используемая для последнего тика, неверна (вы вручную объявили ее равной 18, и это переопределяет значение по умолчанию 17.8
); проблема не в построении графика: проблема в том, как вы размещаете метки x (особенно последнюю).
В следующем примере я показываю один из возможных способов исправить ситуацию: я позволил xtick=data
(теперь отметки и их метки автоматически выбираются из таблицы) и использовал extra x ticks
и extra xtick labels
со вспомогательной синей сеткой, чтобы просто показать, где на самом деле находится точка, соответствующая 18; я также изменил используемую отметку (использованная вами отметка, на мой взгляд, слишком велика и может создать впечатление, что она расположена в x=18
), а также использовал другой цвет просто для наглядности. Как вы можете видеть, координата x для последней точки находится именно там, где она должна быть (немного левее красной вертикальной линии, проведенной для 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}
Вы можете использовать явный список для 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}