如何使用 pgfplots 向散点图添加抖动

如何使用 pgfplots 向散点图添加抖动

我有以下散点图:

\begin{tikzpicture}
  \begin{axis}[
    enlarge x limits=0.02,
    xmin=0,
  ]
    \addplot+[only marks,mark size=1pt] table[x=rmsd,y=seq_score_min] {\featuretable};
  \end{axis}
\end{tikzpicture}

https://i.stack.imgur.com/fG8tJ.png

我想给标记添加抖动,即一些噪音,这样人们就可以更好地了解标记的数量,否则这些标记可能会相互重叠。在这个特定情况下,最右边的值需要这样做。

答案1

您可以使用x filter向每个 x 坐标添加一些随机噪声。我定义了一种新jitter样式,它采用可选参数来控制噪声量:

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread{
X   Y
1   2
1   2.1
1   2.05
1   2
1   2.2
1   2.15
1   2.25
1   2.1
1   2.025
1   2.125
1   2.0525
1   2.25
1   2.225
1   2.1525
1   2.2525
1   2.125
}\datatable

\pgfplotsset{
    jitter/.style={
        x filter/.code={\pgfmathparse{\pgfmathresult+rnd*#1}}
    },
    jitter/.default=0.1
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[only marks,ymin=0,ymax=4,xmin=0,xmax=5]
\addplot +[jitter=0.3] table {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}

答案2

加上抖动或噪音我宁愿在另一个程序中执行此操作TeX,但是它可以完成。

请参阅此代码,它可让您在X或者方向。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[domain=0:10,samples=100,
    my x filter/.style={%
        x filter/.code={%
            \def\tmpx{##1}%
            \pgfmathparse{\tmpx > 8 ? \tmpx+rnd*#1 : \tmpx}%
        }},
    my y filter/.style={%
        y filter/.code={%
            \def\tmpy{##1}
            \pgfmathparse{\tmpy > .75 ? \tmpy+rnd*#1 : \tmpy}
        }}]
    \addplot[blue,my x filter=.5] function {sin(x)};
    \addplot[red,my y filter=.1] function {cos(x)};
  \end{axis}
\end{tikzpicture}
\end{document}

这将产生(不完全是,由于兰特)。

例子

答案3

缺乏评论权限杰克的回答我把它做成新的。

给定的代码只会添加正抖动,因此点会偏移到其实际值的右侧。如果您更喜欢对称抖动,请使用以下代码:

\pgfplotsset{
    jitter/.style={
        x filter/.code={\pgfmathparse{\pgfmathresult+(rnd-.5)*#1}}}
    },
    jitter/.default=0.1
}

rnd 生成一个介于 0 和 1 之间且均匀分布的伪随机数。(来自 PGF 手册),所以我们只需减去 0.5 即可将其移动到 -0.5 和 +0.5 之间。请注意,首先调整随机部分,然后应用因子。

相关内容