![Как раскрасить точки рассеяния и создать записи легенды на основе столбца типа данных](https://rvso.com/image/298793/%D0%9A%D0%B0%D0%BA%20%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%B8%D1%82%D1%8C%20%D1%82%D0%BE%D1%87%D0%BA%D0%B8%20%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F%20%D0%B8%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8%20%D0%BB%D0%B5%D0%B3%D0%B5%D0%BD%D0%B4%D1%8B%20%D0%BD%D0%B0%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%B0%20%D1%82%D0%B8%D0%BF%D0%B0%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.png)
Допустим, у меня есть такой файл:
\documentclass{standalone}
\usepackage{pgfplots,filecontents}
\begin{filecontents*}{data}
1 10 type1
2 25 type2
3 75 type2
4 100 type3
5 150 type3
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[scatter,only marks]
table[row sep=crcr] {data};
\end{axis}
\end{tikzpicture}
\end{document}
что создает этот график (отметим, что код выбрасывает свои игрушки из коляски с введением третьего столбца данных и портит построение координат (1,10) и (2,25):
Как мне:
- Раскрасьте каждую точку рассеивания или, возможно, назначьте каждой случайный символ на основе ее столбца "type". Я понимаю, что для последнего, вероятно, понадобится оператор типа "if type=type1, symbol=triangle", что нормально.
- Создайте легенду, указывающую, какой цвет относится к какому типу данных.
Я могу сделать это вручную с помощью отдельных \addplot
команд для каждого типа данных, за которыми следует \addlegendentry{type1}
, но наверняка должен быть простой способ автоматизировать это с помощью одного addplot
?
решение1
В руководстве PGFPLOTS есть пример, который делает именно то, что вы делаете. В настоящее время он находится на странице 107, или4.5.11 Диаграммы рассеяния.
\documentclass[border=9,tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[legend pos=south east]
\addplot[
scatter,only marks,scatter src=explicit symbolic,
scatter/classes={
a={mark=square*,blue},
b={mark=triangle*,red},
c={mark=o,draw=black,fill=black}
}
]
table[x=x,y=y,meta=label]{
x y label
0.1 0.15 a
0.45 0.27 c
0.02 0.17 a
0.06 0.1 a
0.9 0.5 b
0.5 0.3 c
0.85 0.52 b
0.12 0.05 a
0.73 0.45 b
0.53 0.25 c
0.76 0.5 b
0.55 0.32 c
};
\legend{Class 1,Class 2,Class 3}
\end{axis}
\end{tikzpicture}
\end{document}