pgfplots:使用“x 过滤器”降低图的点密度

pgfplots:使用“x 过滤器”降低图的点密度

用户埃塞克斯发布了一个很好的方法,介绍如何使用来增加一定范围内的数据点的点密度,同时使剩余的图保持较低的点密度x filter


最小工作示例(MWE):

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}

\begin{filecontents}{data.csv}
    Time;Value
    0.000;24.3
    0.008;67.1
    0.017;74.7
    0.025;71.3
    0.033;66.5
    0.042;61.8
    0.050;57.7
    0.058;54.6
    0.067;52.2
    0.075;49.7
    0.083;47.8
    0.092;46.3
    0.100;45.3
    0.108;44.0
    0.117;43.0
    0.125;42.3
    0.133;41.8
    0.142;41.2
    0.150;40.7
    0.158;40.3
    0.167;39.8
    0.175;39.7
    0.183;39.3
    0.192;39.0
    0.200;38.8
    0.208;38.5
    0.217;38.5
    0.225;38.2
    0.233;38.1
    0.242;37.9
    0.250;37.8
    0.258;37.7
    0.267;37.5
    0.275;37.3
    0.283;37.0
    0.292;37.0
    0.300;37.0
    0.308;36.8
    0.317;36.5
    0.325;36.6
    0.333;36.3
    0.342;36.5
    0.350;36.2
    0.358;36.2
    0.367;36.1
    0.375;36.0
    0.383;35.9
    0.392;35.9
    0.400;35.7
    0.408;35.5
    0.417;35.4
    0.425;35.4
    0.433;35.3
    0.442;35.2
    0.450;35.1
    0.458;34.9
    0.467;35.0
    0.475;34.9
    0.483;34.9
    0.492;34.8
    0.500;34.7
    0.508;34.5
    0.517;34.3
    0.525;34.4
    0.533;34.5
    0.542;34.3
    0.550;34.2
    0.558;34.2
    0.567;34.1
    0.575;34.1
    0.583;33.9
    0.592;33.9
    0.600;33.7
    0.608;33.8
    0.617;33.8
    0.625;33.7
    0.633;33.6
    0.642;33.5
    0.650;33.5
    0.658;33.5
    0.667;33.3
    0.675;33.3
    0.683;33.2
    0.692;33.2
    0.700;33.1
    0.708;33.1
    0.717;33.0
    0.725;33.0
    0.733;32.9
    0.742;32.9
    0.750;32.8
    0.758;32.7
    0.767;32.8
    0.775;32.6
    0.783;32.6
    0.792;32.5
    0.800;32.5
    0.808;32.4
    0.817;32.4
    0.825;32.4
    0.833;32.3
    0.842;32.1
    0.850;32.2
    0.858;32.1
    0.867;32.1
    0.875;32.0
    0.883;32.0
    0.892;32.0
    0.900;32.0
    0.908;32.0
    0.917;31.8
    0.925;31.8
    0.933;31.8
    0.942;31.7
    0.950;31.7
    0.958;31.6
    0.967;31.6
    0.975;31.7
    0.983;31.6
    0.992;31.6
    1.000;31.5
\end{filecontents}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
            [x filter/.code={\pgfmathparse{#1>0.3 && mod(\coordindex,10)!=0 ? nan :#1}}]
            \addplot table[col sep = semicolon,x=Time,y=Value] {data.csv};
        \end{axis}
    \end{tikzpicture}%
\end{document}

结果截图:

结果截图


问题说明:

假设我有大量数据点(例如,在 7 天内每隔 30 秒测量几个值 = 20160 个数据集)。只有值高于 40 的点才是相关的。

是否可以应用以下属性来减小绘图的文件大小:

  • each nth point = {1}如果分值高于 40,则为所有分设置
  • each nth point = {30}如果分值低于 40,则为所有分设置

或者,尝试用程序员的语言来解释:

如果point-value> 40,则each nth point = {1};否则each nth point = {30}


我用这个来尝试减少绘图文件的大小,以便编译。此外,不重要的基本“数据噪声”的显示精度较低。

答案1

我想知道为什么您要使用x过滤器而不是过滤器,y filter如果您想过滤掉低于某个值的点。如果我设置一个y filter,我会得到

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{filecontents}

\begin{filecontents}{data.csv}
    Time;Value
    0.000;24.3
    0.008;67.1
    0.017;74.7
    0.025;71.3
    0.033;66.5
    0.042;61.8
    0.050;57.7
    0.058;54.6
    0.067;52.2
    0.075;49.7
    0.083;47.8
    0.092;46.3
    0.100;45.3
    0.108;44.0
    0.117;43.0
    0.125;42.3
    0.133;41.8
    0.142;41.2
    0.150;40.7
    0.158;40.3
    0.167;39.8
    0.175;39.7
    0.183;39.3
    0.192;39.0
    0.200;38.8
    0.208;38.5
    0.217;38.5
    0.225;38.2
    0.233;38.1
    0.242;37.9
    0.250;37.8
    0.258;37.7
    0.267;37.5
    0.275;37.3
    0.283;37.0
    0.292;37.0
    0.300;37.0
    0.308;36.8
    0.317;36.5
    0.325;36.6
    0.333;36.3
    0.342;36.5
    0.350;36.2
    0.358;36.2
    0.367;36.1
    0.375;36.0
    0.383;35.9
    0.392;35.9
    0.400;35.7
    0.408;35.5
    0.417;35.4
    0.425;35.4
    0.433;35.3
    0.442;35.2
    0.450;35.1
    0.458;34.9
    0.467;35.0
    0.475;34.9
    0.483;34.9
    0.492;34.8
    0.500;34.7
    0.508;34.5
    0.517;34.3
    0.525;34.4
    0.533;34.5
    0.542;34.3
    0.550;34.2
    0.558;34.2
    0.567;34.1
    0.575;34.1
    0.583;33.9
    0.592;33.9
    0.600;33.7
    0.608;33.8
    0.617;33.8
    0.625;33.7
    0.633;33.6
    0.642;33.5
    0.650;33.5
    0.658;33.5
    0.667;33.3
    0.675;33.3
    0.683;33.2
    0.692;33.2
    0.700;33.1
    0.708;33.1
    0.717;33.0
    0.725;33.0
    0.733;32.9
    0.742;32.9
    0.750;32.8
    0.758;32.7
    0.767;32.8
    0.775;32.6
    0.783;32.6
    0.792;32.5
    0.800;32.5
    0.808;32.4
    0.817;32.4
    0.825;32.4
    0.833;32.3
    0.842;32.1
    0.850;32.2
    0.858;32.1
    0.867;32.1
    0.875;32.0
    0.883;32.0
    0.892;32.0
    0.900;32.0
    0.908;32.0
    0.917;31.8
    0.925;31.8
    0.933;31.8
    0.942;31.7
    0.950;31.7
    0.958;31.6
    0.967;31.6
    0.975;31.7
    0.983;31.6
    0.992;31.6
    1.000;31.5
\end{filecontents}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
        y filter/.expression={(y < 45 && mod(\coordindex,10) >0)? nan : y}]
            \addplot table[col sep = semicolon,x=Time,y=Value] {data.csv};
        \end{axis}
    \end{tikzpicture}%
\end{document}

在此处输入图片描述

相关内容