我有这个.tex
\documentclass[12pt,margin=2mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{compat=1.16}
\usepackage{filecontents}
\begin{filecontents}{amm.csv}
year,aabach,grosseaa,emme
1975,,,438
1976,,,1943
1977,,,347
1978,,,208
1979,,,150
1980,,,238
1981,,,120
1982,,,198
1983,80,,167
1984,68,,158
1985,180,375,169
1986,140,407,119
1987,66,0,126
1988,,,60
1989,50,75,100
1990,,245,108
1991,,120,70
1992,,172,89
1993,,118,109
1994,,90,89
1995,43,122,164
1996,70,115,88
1997,50,70,40
1998,20,95,48
1999,152,152,86
2000,62,100,70
2001,35,110,40
2002,70,54,30
2003,35,66,39
2004,74,85,58
2005,65,92,50
2006,65,92,56
2007,36,60,10
2008,44,50,20
2009,45,100,57
2010,30,70,39
2011,30,35,40
2012,20,88,19
2013,24,34,29
2014,30,58,19
2015,25,30,48
2016,40,40,20
2017,26,50,30
\end{filecontents}
\begin{document}
\pgfkeys{/pgf/number format/.cd,1000 sep={}}
\begin{tikzpicture}
\begin{axis}[skip coords between index={1}{2},
ymin=0, ymax=500,
ytick={0,50,100,...,500},
xmin=1970,xmax=2018,
xtick={1975,1980,...,2020},
xlabel={Jahr},
ylabel={Konzentration [mg\,/\,$m^3$]},
width=15cm,
cycle list name=color
]
\addplot table [x=year, y=aabach, col sep=comma] {amm.csv};
\addplot table [x=year, y=grosseaa, col sep=comma] {amm.csv};
\addplot table [x=year, y=emme, col sep=comma, mark=*] {amm.csv};
\newcommand*{\VerticalPos}{70}% Desired vertical postion
\coordinate (Left) at ($(current axis.left of origin) +(axis direction cs: 0,\VerticalPos)$);
\coordinate (Right) at ($(current axis.right of origin)+(axis direction cs: 0,\VerticalPos)$);
\draw [ultra thick, dotted, draw=red]
(Left) -- (Right)
node[pos=0.5,above,xshift=-140] {Grenzwert = \VerticalPos};
\legend{Aabach,Grosse Aa,Kleine Emme}
\end{axis}
\end{tikzpicture}
\end{document}
生成此数据pgfplot
。大约在 2005 年之后,数据开始压缩,难以阅读。由于 250 以上有大量空间,我想知道是否可以“扩展” y 轴,但保留ymax=500
?即在 0 到 250 之间容纳更多数据,而不改变高度。
答案1
作为建议,您可以使用半对数图:
- 数据点不那么拥挤
- 它传达了一个重要的信息:
- 所有 3 个区域都以几乎相同的速率呈指数衰减。
需要进行的细微改动如下所示% <<<
:
\documentclass[12pt,margin=2mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{compat=1.16}
\usepackage{filecontents}
\begin{filecontents}{amm.csv}
year,aabach,grosseaa,emme
1975,,,438
1976,,,1943
1977,,,347
1978,,,208
1979,,,150
1980,,,238
1981,,,120
1982,,,198
1983,80,,167
1984,68,,158
1985,180,375,169
1986,140,407,119
1987,66,0,126
1988,,,60
1989,50,75,100
1990,,245,108
1991,,120,70
1992,,172,89
1993,,118,109
1994,,90,89
1995,43,122,164
1996,70,115,88
1997,50,70,40
1998,20,95,48
1999,152,152,86
2000,62,100,70
2001,35,110,40
2002,70,54,30
2003,35,66,39
2004,74,85,58
2005,65,92,50
2006,65,92,56
2007,36,60,10
2008,44,50,20
2009,45,100,57
2010,30,70,39
2011,30,35,40
2012,20,88,19
2013,24,34,29
2014,30,58,19
2015,25,30,48
2016,40,40,20
2017,26,50,30
\end{filecontents}
\begin{document}
\pgfkeys{/pgf/number format/.cd,1000 sep={}}
\begin{tikzpicture}
\begin{semilogyaxis}[ % <<<
title=Vergleichsdaten 1975 - 2017, % <<<
skip coords between index={1}{2},
ymin=0, ymax=500,
% ytick={0,50,100,...,500},
xmin=1970,xmax=2018,
xtick={1975,1980,...,2020},
xlabel={Jahr},
ylabel={Konzentration [mg\,/\,$m^3$]},
width=15cm,
cycle list name=color,
]
\addplot table [x=year, y=aabach, col sep=comma] {amm.csv};
\addplot table [x=year, y=grosseaa, col sep=comma] {amm.csv};
\addplot table [x=year, y=emme, col sep=comma, mark=*] {amm.csv};
\newcommand*{\VerticalPos}{70}% Desired vertical postion
\coordinate (Left) at ($(current axis.left of origin) +(axis direction cs: 0,\VerticalPos)$);
\coordinate (Right) at ($(current axis.right of origin)+(axis direction cs: 0,\VerticalPos)$);
\draw [ultra thick, dotted, draw=red]
(Left) -- (Right)
node[pos=0.5,above,xshift=-140] {Grenzwert = \VerticalPos};
\legend{Aabach,Grosse Aa,Kleine Emme}
\end{semilogyaxis} % <<<
\end{tikzpicture}
\end{document}
PS,仅供参考
顺便说一句,这个半对数图可以开辟有关数据以及它们传达或不传达的信息的新视角。
以 1995/1.9700 为参考点,忽略早期数据,这 3 条曲线可视为 3 条线性图,其中存在一些变化/偏差,这些变化/偏差是由各种噪声源引起的。所有数据的方差分析 (ANOVA) 表明:
- 68.6% 的数据变化是由平均梯度引起的(这很正常)
- 6.6% 由 3 个地点/地区造成
- 7.3% 是由于噪声对 3 个位置的 3 个梯度的影响造成的
- 17.5% 残留(未解决)误差变化
因此,合理的总结如下:
- 汇集所有错误
- 放弃 3 个地点/区域的单独梯度
- 用一个全局渐变(大致是粗红线)替换它们
- 将每个数据列拟合到该平均梯度并获得 3 个横坐标值(初始振幅)
- 将这些横坐标值视为特征值
- 将它们与其他合理的变化来源联系起来,例如河流宽度等。
- 这些也都与横坐标和梯度的一定时间延迟相对应(linlin 世界中的指数行为)
从洞察的角度来看:
- 简化结果
- 简化结论
- 避免“追风”
- 有助于集中精力于重要的事情,例如改进测量、政策等。