我想为 中的线图和条形图定义不同的样式pgfplots
,以后可以根据用户的选择单独使用或一起使用。因此,我为每种样式定义了两个循环列表,分别称为*Bar
和*Line
。为了同时加载两者,我定义了另一种样式,称为*
和 ,该样式已通过宏“自动”执行此步骤\defineStyle
。
有没有更优雅的方式来创建样式,因为如您所见,我对每个条形图都使用相同的设置(标记、填充等),那么有没有一种巧妙的方法可以遍历颜色列表并通过一次调用宏来创建所有三种样式?类似于和\createStyle{color}{blue,orange}
的东西\createStyle{mono}{black,gray}
可以与任意数量的颜色一起使用,从而创建mono
和对应的monoBar
和monoLine
样式?也许有一种更像PGF
- 的方法,我忽略了?
\documentclass[aspectratio=169]{beamer}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.15}
\newcommand{\defineStyle}[1]{\pgfplotsset{#1/.style={/pgfplots/bar cycle list/.style={/pgfplots/cycle list name=#1Bar}, cycle list name=#1Line}}}
\pgfplotscreateplotcyclelist{colorLine}{blue,orange}
\pgfplotscreateplotcyclelist{colorBar}{{fill=blue,draw=none,mark=none},{fill=orange,draw=none,mark=none}}
\defineStyle{color}
\pgfplotscreateplotcyclelist{monoLine}{black,gray}
\pgfplotscreateplotcyclelist{monoBar}{{{fill=black,draw=none,mark=none},{fill=gray,draw=none,mark=none}}}
\defineStyle{mono}
\begin{document}
\pgfplotsset{color}
\begin{frame}<1>[label=pgfplot]
\frametitle<1>{color}
\frametitle<2>{mono}
\centering
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=11,ymin=0,ymax=9,samples=2,domain=0:10,stack plots=y]
\addplot {0.1*x};
\addplot {0.1*x};
\addplot {0.1*x};
\addplot {0.1*x};
\addplot {0.1*x};
\addplot {0.1*x};
\addplot {0.1*x};
\end{axis}
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\begin{axis}[ybar,xmin=-0.5,xmax=2.75,ymin=0,ymax=11,xtick={0,1,...,2},xticklabels={test1,test2,test3},bar width=4pt]
\addplot coordinates{(0,3) (1,10) (2,9)};
\addplot coordinates{(0,7) (1,9) (2,7)};
\addplot coordinates{(0,5) (1,1) (2,4)};
\addplot coordinates{(0,7) (1,2) (2,3)};
\addplot coordinates{(0,4) (1,7) (2,7)};
\addplot coordinates{(0,2) (1,5) (2,6)};
\addplot coordinates{(0,3) (1,4) (2,8)};
\end{axis}
\end{tikzpicture}
\end{frame}
\pgfplotsset{mono}
\againframe<2>{pgfplot}
\end{document}