Como posso evitar rótulos de texto sobrepostos no gráfico de dispersão tikz?

Como posso evitar rótulos de texto sobrepostos no gráfico de dispersão tikz?

Tentei traçar uma dispersão em 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}

Porém, neste caso, alguns rótulos estão sobrepostos e não é possível ver corretamente. Como posso evitar a sobreposição? Acho que uma maneira de fazer isso é desenhá-lo de forma mais ampla. No entanto, descobri que isso [x=12cm,y=4cm]não funciona. Ou existe uma maneira mais inteligente de fazer isso?

Responder1

O exemplo a seguir mostra um método para correções manuais. Os dois rótulos problemáticos são movidos por macros \ToSouthe \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

Responder2

Eu resolvi essa questão sozinho. a largura da dispersão pode ser ajustada na opção do eixo como:

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

em vez de

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

, o que não funciona.

informação relacionada