我使用 pgfplots 绘制文件中的多条曲线。该图分两步绘制
- 仅绘制标记,从文件中获取原始值
- 仅绘制线条,使用 gnuplot 近似值曲线
所以它看起来像这样(以下仅说明我遇到此问题的原因):
\foreach \r in {1,...,9} { % first loop, marks
\addplot+[only marks]
plot table [x index=0, y index=\r]{file.csv};
}
\foreach \rg in {2,...,10} { % second loop, lines (gnu starts with 1)
\addplot+[no markers]
gnuplot [raw gnuplot]
{
f(x)=a*x+b;
a=1; b=0.1;
fit f(x) 'file.csv' using 1:\rg\space every ::1 via a;
plot [x=0:10] f(x);
};
}
现在的问题是 pgfplot 似乎使用了它遇到的前几个图的样式。这使得所有图例条目都没有线条,因为第一个图的样式只有标记。
因此,以下 MWE 会产生如下输出,使图例条目没有任何线条:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotscreateplotcyclelist{mycyclelist}{
{loosely dashed, blue}, {red}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[cycle list name = mycyclelist, legend entries={a, b}, legend pos=north west]
% only marks
\addplot+[only marks]
coordinates
{
(0,0)
(10,5)
};
\addplot+[only marks]
coordinates
{
(0,0)
(10,7)
};
% no markers
\addplot+[no markers]
coordinates
{
(0,0)
(10,5)
};
\addplot+[no markers]
coordinates
{
(0,0)
(10,7)
};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
这个选项legend image post style
正是您所需要的:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\pgfplotscreateplotcyclelist{mycyclelist}{
{loosely dashed, blue}, {red}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
cycle list name = mycyclelist,
legend entries={a, b},
legend pos=north west,
legend image post style={sharp plot},
]
% only marks
\addplot+[only marks]
coordinates
{
(0,0)
(10,5)
};
\addplot+[only marks]
coordinates
{
(0,0)
(10,7)
};
% no markers
\addplot+[no markers]
coordinates
{
(0,0)
(10,5)
};
\addplot+[no markers]
coordinates
{
(0,0)
(10,7)
};
\end{axis}
\end{tikzpicture}
\end{document}
后面的选项列表legend image post style
适用于每个图例图像,并且与绘图样式无关。添加sharp plot
本质上会覆盖该only marks
语句 - 但仅适用于图例图像。