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