当使用元数据作为标记尺寸时,如何保持相同的标记颜色?

当使用元数据作为标记尺寸时,如何保持相同的标记颜色?

这可能是一个简单的答案,但我无法让它工作,而且我显然不明白手册或 tex.sx 上对类似问题的其他答案(请参阅12, 和3)。

基本上,我想使用表中附加列的值来指定标记的大小,但保持每个标记的颜色相同(例如,由 定义的颜色\definecolor{name}{rgb}{x1,x2,x3})。

MWE 正在做几乎我想要的是:标记的大小由第三列控制,当然颜色也是如此。我需要更改什么才能使所有标记的颜色保持不变?

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{plotmarks}
\usepackage{amsmath}
\usepackage{filecontents}

\begin{filecontents*}{temp.dat}
1   1   100
2   2   200
3   3   300
4   4   400
5   5   500
6   6   600
7   7   700
8   8   800
9   9   900
10  10  1000
\end{filecontents*}

\begin{document}
\begin{tikzpicture}

\begin{axis}[%
width=4.5in,
height=3.5in,
scale only axis,
xmin=0,
xmax=10,
ymin=0,
ymax=10,
axis x line*=bottom,
axis y line*=left
]
\addplot[%
scatter,
only marks,
mark=*,
color=blue,
visualization depends on={\thisrowno{2} \as \perpointmarksize},
scatter/@pre marker code/.append style={/tikz/mark size=\perpointmarksize/50}] plot table[row sep=crcr]{temp.dat};
\end{axis}
\end{tikzpicture}%
\end{document}

答案1

scatter让样式只改变大小而不改变标记颜色的最直接方法是添加

scatter/@pre marker code/.style={/tikz/mark size=\pgfplotspointmeta/50},
scatter/@post marker code/.style={}

\addplot选项。请注意使用.style而不是.append style。加载样式时scatter,除其他事项外,还会安装其自己的处理@pre marker code更改颜色的内容。通过使用@pre marker code/.style,您可以用自己的代码覆盖该代码。请注意,您还需要清除@post marker code使用/.style={},因为否则它将包含不匹配的\endscope

为了能够使用\pgfplotspointmeta宏来缩放数据点,​​而不是使用 定义的宏visualization depends on,您需要point meta=explicit symbolic\addplot选项中设置。这告诉 PGFPlots 期望meta每个数据点都有一个值,而不是简单地使用该y值。symbolic关键字指定不应解析该值,也不应将其转换为浮点格式,这会使标准数学解析器失效。

\documentclass[tikz, border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{plotmarks}
\usepackage{amsmath}

\begin{filecontents*}{temp.dat}
1   1   100
2   2   200
3   3   300
4   4   400
5   5   500
6   6   600
7   7   700
8   8   800
9   9   900
10  10  1000
\end{filecontents*}

\begin{document}
\begin{tikzpicture}

\begin{axis}[%
    width=4.5in,
    height=3.5in,
    scale only axis,
    xmin=0,
    xmax=10,
    ymin=0,
    ymax=10,
    axis x line*=bottom,
    axis y line*=left
]
\addplot[%
    scatter=true,
    only marks,
    mark=*,
    color=blue,
    point meta=explicit symbolic,
    scatter/@pre marker code/.style={/tikz/mark size=\pgfplotspointmeta/50},
    scatter/@post marker code/.style={}
] table [meta index=2] {temp.dat};
\end{axis}
\end{tikzpicture}%
\end{document}

相关内容