这可能是一个简单的答案,但我无法让它工作,而且我显然不明白手册或 tex.sx 上对类似问题的其他答案(请参阅1,2, 和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}