![如何避免 tikz 散点图中的文本标签重叠?](https://linux22.com/image/287147/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%20tikz%20%E6%95%A3%E7%82%B9%E5%9B%BE%E4%B8%AD%E7%9A%84%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE%E9%87%8D%E5%8F%A0%EF%BC%9F.png)
我尝试使用在乳胶中绘制散点图tikzpicture
。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture} [x=12cm,y=4cm]
\begin{axis}[xlabel={y title}, ylabel={x title}]
\addplot[scatter,mark=*,only marks, point meta=x,nodes near coords*={\data},
visualization depends on={value \thisrow{dataname} \as \data},]
table [x=x,y=y]{
x y dataname
99 113 water
37 142 rain
18 164 liver
5 195 coast
69 95 butterfly
330 36 mountain
121 96 dragonfly
208 0 greentree
};
\end{axis}
\end{tikzpicture}
\end{document}
但是,在这种情况下,一些标签重叠,无法正确显示。如何避免重叠?我认为一种方法是将其绘制得更宽。但是我发现这[x=12cm,y=4cm]
不起作用。或者有更聪明的方法吗?
答案1
以下示例显示了手动修复的方法。两个有问题的标签通过宏\ToSouth
和移动\ToWest
。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture} [x=12cm,y=4cm]
\def\MarkSize{.75em}
\protected\def\ToWest#1{%
\llap{#1\kern\MarkSize}\phantom{#1}%
}
\protected\def\ToSouth#1{%
\sbox0{#1}%
\smash{%
\rlap{%
\kern-.5\dimexpr\wd0 + \MarkSize\relax
\lower\dimexpr.375em+\ht0\relax\copy0 %
}%
}%
\hphantom{#1}%
}
\begin{axis}[
xlabel={y title},
ylabel={x title},
]
\addplot[
scatter,
mark=*,
only marks,
point meta=x,
nodes near coords*={\data},
visualization depends on={value \thisrow{dataname} \as \data},
]
table [x=x,y=y]{
x y dataname
99 113 water
37 142 rain
18 164 liver
5 195 coast
69 95 \ToSouth{butterfly}
330 36 \ToWest{mountain}
121 96 dragonfly
208 0 greentree
};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
我自己解决了这个问题。散点的宽度可以在轴选项中调整,例如:
\begin{axis}[ xlabel={y title}, ylabel={x title}, width=15cm, height=9cm]
代替
\begin{tikzpicture} [x=12cm,y=4cm]
,但不起作用。