¿Cómo puedo evitar la superposición de etiquetas de texto en el diagrama de dispersión de Tikz?

¿Cómo puedo evitar la superposición de etiquetas de texto en el diagrama de dispersión de Tikz?

Intenté trazar una dispersión en látex usando 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}

Sin embargo, en este caso, algunas etiquetas se superponen y no se pueden ver correctamente. ¿Cómo puedo evitar la superposición? Creo que una forma de hacerlo es dibujarlo más ampliamente. Sin embargo, descubrí que eso [x=12cm,y=4cm]no funciona. ¿O hay una forma más inteligente de hacerlo?

Respuesta1

El siguiente ejemplo muestra un método para correcciones manuales. Las dos etiquetas problemáticas se mueven mediante macros \ToSouthy \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}

Resultado

Respuesta2

Resolví esta pregunta por mí mismo. El ancho de la dispersión se puede ajustar en la opción del eje como:

\begin{axis}[ xlabel={y title}, ylabel={x title}, width=15cm, height=9cm]

en lugar de

\begin{tikzpicture} [x=12cm,y=4cm] 

, que no funciona.

información relacionada