目的:
将图的宽度设置为\linewidth
。
当前状态:
width
将环境选项设置axis
为会\linewidth
产生Dimension too large.
错误。事实上,在生成的文档中,绘图并未跨越整个线宽。
问题:
我的代码是否有错误或者是否存在缺陷?
梅威瑟:
\documentclass{scrartcl}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{dateplot}
\begin{document}
\pgfplotstableread[col sep=comma, row sep=\\]{
2015-11-11 14:00, 0.2\\
2015-11-11 14:01, 0.217\\
2015-11-11 14:02, 0.255\\
2015-11-11 14:03, 0.288\\
2015-11-11 14:06, 0.58\\
2015-11-11 14:07, 0.91\\
2015-11-11 14:08, 1.02\\
2015-11-11 14:10, 1.05\\
2015-11-11 14:12, 0.92\\
2015-11-11 14:13, 0.78\\
2015-11-11 14:15, 0.56\\
2015-11-11 14:17, 1.1\\
}\datatable
\begin{tikzpicture}
\begin{axis}[
height={5cm},
width={\linewidth},
xmin={2015-11-11 14:00},
xmax={2015-11-11 14:20},
ytick={0.25,0.5,0.75,1},
yticklabels={,,,,,,,,},
date coordinates in=x,
axis x line=bottom,
axis y line=left,
xticklabel={\hour:\minute\,Uhr},
xtick={2015-11-11 14:05,2015-11-11 14:10,2015-11-11 14:15},
enlarge y limits=0.2,
enlarge x limits=0.1,
grid,
]
\addplot[smooth,blue,line width=1pt] table {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
该dateplot
库需要将日期范围映射到整数(TeX 没有 long...)。为了充分利用可用的、有限的数据范围,它使用date ZERO
来校准数字。
如果您设置date ZERO
为接近数据范围的任何日期,则绘图就很好。
实际缩放需要scale only axis
仅pgfplots
支持轴矩形的精确缩放(否则使用轴描述的常数猜测)。此外,您可能希望使用trim axis left,trim axis right
作为选项来tikzpicture
剪掉左侧或右侧的任何边界框伪影。最后,您应该\noindent
在图片之前使用(用于左对齐)并在图片之后删除尾随空格\end{tikzpicture}
以避免出现虚假空格(常见的 LaTeX 问题)。
经过所有这些改变,我得出
\documentclass{scrartcl}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{lipsum}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{dateplot}
\begin{document}
\pgfplotstableread[col sep=comma, row sep=\\]{
2015-11-11 14:00, 0.2\\
2015-11-11 14:01, 0.217\\
2015-11-11 14:02, 0.255\\
2015-11-11 14:03, 0.288\\
2015-11-11 14:06, 0.58\\
2015-11-11 14:07, 0.91\\
2015-11-11 14:08, 1.02\\
2015-11-11 14:10, 1.05\\
2015-11-11 14:12, 0.92\\
2015-11-11 14:13, 0.78\\
2015-11-11 14:15, 0.56\\
2015-11-11 14:17, 1.1\\
}\datatable
\noindent
\begin{tikzpicture}[trim axis left,trim axis right]
\begin{axis}[
height={5cm},
width={\linewidth},
xmin={2015-11-11 14:00},
xmax={2015-11-11 14:20},
ytick={0.25,0.5,0.75,1},
yticklabels={,,,,,,,,},
date coordinates in=x,
axis x line=bottom,
axis y line=left,
xticklabel={\hour:\minute\,Uhr},
xtick={2015-11-11 14:05,2015-11-11 14:10,2015-11-11 14:15},
enlarge y limits=0.2,
enlarge x limits=0.1,
grid,
date ZERO=2015-11-00,
scale only axis,
]
\addplot[smooth,blue,line width=1pt] table {\datatable};
\end{axis}
\end{tikzpicture}%
\lipsum
\end{document}