![如何使用 pgfplots 向散点图添加抖动](https://linux22.com/image/245859/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20pgfplots%20%E5%90%91%E6%95%A3%E7%82%B9%E5%9B%BE%E6%B7%BB%E5%8A%A0%E6%8A%96%E5%8A%A8.png)
我有以下散点图:
\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}
我想给标记添加抖动,即一些噪音,这样人们就可以更好地了解标记的数量,否则这些标记可能会相互重叠。在这个特定情况下,最右边的值需要这样做。
答案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 之间。请注意,首先调整随机部分,然后应用因子。