我有一个数据文件,它提供了 x 位置 ( xpos
)、半径和颜色。我希望绘制一个(xpos,0)
具有适当半径和颜色的圆。我该如何实现?
我使用了两种方法。第一种方法是基于\addplot table
,我可以使用 获得所需的颜色meta
。这种方法的问题是正确的圆圈大小。
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\pgfplotsset{compat=newest}
\begin{filecontents}{data.out}
xpos radius color
0 1 2
1 3 4
2 5 6
3 7 8
4 11 12
5 13 14
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
colorbar,
]
\pgfplotstableread{data.out}\datatable
\addplot+[scatter,only marks,mark=*,point meta=explicit] table [x index={0},y expr=0,meta
index={2}] \datatable;
\end{axis}
\end{tikzpicture}
\end{document}
在另一种方法中,我尝试了循环和 pgfplotstable,它们可以正确显示圆圈大小。这种方法的问题在于圆圈的正确着色。我也不知道如何正确放置和缩放轴。如果我将命令\draw
放在轴环境中,则不会绘制任何内容。
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\pgfplotsset{compat=newest}
\begin{filecontents}{data.out}
%xpos radius color
0 1 2
1 3 4
2 5 6
3 7 8
4 11 12
5 13 14
\end{filecontents}
\begin{document}
\newcommand{\myxpos}{}
\newcommand{\myrad}{}
\newcommand{\mycolor}{}
\begin{tikzpicture}
\pgfplotstableread{data.out}\datatable
\pgfplotstablegetrowsof{\datatable}
\pgfmathparse{\pgfplotsretval-1}
\pgfplotsinvokeforeach{1,...,\pgfmathresult} {
\pgfplotstablegetelem{#1}{0}\of\datatable
\pgfmathsetmacro{\myxpos}{\pgfplotsretval}
\pgfplotstablegetelem{#1}{1}\of\datatable
\pgfmathsetmacro{\myrad}{\pgfplotsretval}
\pgfplotstablegetelem{#1}{2}\of\datatable
\pgfmathsetmacro{\mycolor}{\pgfplotsretval}
\draw[thick] (\myxpos,0) circle [radius=\myrad];
}
\begin{axis}[
anchor=origin,
colorbar,
xmin=-10,
xmax=-20,
ymin=-15,
ymax=15,
]
\end{axis}
\end{tikzpicture}
\end{document}
我认为这里的一个问题是\draw circle
仅可用作tikz
命令,而 中没有对应命令pgfplots
。这禁止 中可用的许多简单颜色操作pgfplots
。
这是使用和“matlab2tikz”创建的所需输出matlab
。
答案1
这就是为什么您需要使用visualization depends on
键及其变体(手册对这一点说得很清楚)以及正确的标记类型:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ymin=-1,ymax=1,
colorbar,
visualization depends on=\thisrow{radius}\as\myrad,
scatter/@pre marker code/.append style={/tikz/mark size=\myrad cm},
clip marker paths=true
]
\pgfplotsextra{\show\pgfplotsunitxlength}
\addplot+[scatter,only marks,mark=o,point meta=explicit,ultra thick]
table [x index={0},y expr=0,meta index={2}]
{
xpos radius color
0 1 2
1 3 4
2 5 6
3 7 8
4 11 12
5 13 14
};
\end{axis}
\end{tikzpicture}
\end{document}