我开始使用这个神奇的软件包pgfplots
,我需要一点帮助。在此示例取自手册(第 106 页)
\begin{tikzpicture} \begin{axis}[scatter/classes={
a={mark=square*,blue},%
b={mark=triangle*,red},%
c={mark=o,draw=black}}]
\addplot[scatter,only marks,
scatter src=explicit symbolic]
coordinates {
(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]};
\end{axis}
\end{tikzpicture}
创建了三个散点图类,a、b 和 c,每个类由几个点组成。每个类都有单独的标记格式选项和图例条目,这是一个很棒的功能。但我还没有找到任何方法来“关闭”某些散点图类。
是否有简单的技巧可以仅绘制“a”或“b”类?原则上,我想使用此元数据作为数据的选择或过滤器。这将非常有用。
不命名散点图类不会有帮助,所有点都还在那里,但未格式化,我无法在合理的时间内找到其他解决方案。如果无法使用这些类,是否可以用其他方式进行此类过滤?
答案1
对于此类应用程序,我会使用\addplot ... table
而不是\addplot ... coordinates
。这样可以更轻松地访问坐标属性,还可以更轻松地在 PGFPlots 中使用来自外部应用程序的数据。
如果您以表格形式提供数据,则可以discard if={<column name>}{<value>}
使用discard if not
当条形图基于符号值时,是否可以更改单个条形的颜色?用于过滤数据:
\documentclass[10pt]{amsart}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\pgfplotsset{
discard if/.style 2 args={
x filter/.code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifx\tempa\tempb
\def\pgfmathresult{inf}
\fi
}
},
discard if not/.style 2 args={
x filter/.code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifx\tempa\tempb
\else
\def\pgfmathresult{inf}
\fi
}
}
}
\begin{tikzpicture}
\begin{axis}[
scatter/classes={
a={mark=square*,blue},%
b={mark=triangle*,red},%
c={mark=o,draw=black}
}
]
\addplot[scatter,only marks,
scatter src=explicit symbolic,
discard if={class}{a}
]
table [meta index=2]{
x y class
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
};
\end{axis}
\end{tikzpicture}
\end{document}