Как избежать наложения текстовых меток на диаграмме рассеяния Tikz?

Как избежать наложения текстовых меток на диаграмме рассеяния Tikz?

Я попытался построить график рассеивания в латексе, используя 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] 

, что не работает.

Связанный контент