我想可视化一系列动作。我的第一个想法是使用 pgfplot 中的堆叠条形图来实现此目的,但是,我能找到的所有示例都可视化了数据,其中每个项目都是一对坐标和长度。我还想使用由坐标、长度和类别组成的三元组。
鉴于下面的示例,我希望“操作”具有任意顺序,并且同一操作多次发生。我可以手动实现这一点,但是,对于较大的图(我将拥有)这是不可行的。欢迎提出任何建议。
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xbar stacked, bar width=15pt,
enlargelimits=0.15, legend style={at={(0.5,-0.30)},
anchor=north,legend columns=-1}, xlabel={time [s]},
symbolic y coords={P1, P2}, ytick=data,
y tick label style={rotate=45,anchor=east},
]
\addplot+[xbar] plot coordinates {(1,P1) (2,P2)};
\addplot+[xbar] plot coordinates {(1,P1) (1,P2)};
\addplot+[xbar] plot coordinates {(6,P1) (5,P2)};
\addplot+[xbar] plot coordinates {(4,P1) (2,P2)};
\legend{\strut Action1, \strut Action2, \strut Action3, \strut Action4}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我发现了一个潜在的解决方案 - 不使用 pgfplot - 这不是我想要的,但可以轻松调整以完成工作
\documentclass{standalone}
\usepackage{stackengine}
\renewcommand\useanchorwidth{T}
\usepackage{xcolor}
\def\theyearwidth{1.5pt}
\def\mystrut{\rule{0ex}{1ex}}
\def\myyrstrut{\rule[-1ex]{0ex}{2ex}}
\newlength\yrsfboxrule
\yrsfboxrule .4\fboxrule
\newcommand\yearwidth[1]{\def\theyearwidth{#1}\ignorespaces}
\newcommand\skipyears[2][black]{%
\fboxrule\yrsfboxrule%
\fboxsep=-\yrsfboxrule%
\fcolorbox{#1}{#1}{\mystrut\hspace{#2}}%
\ignorespaces%
}
\newcommand\showyear[2][black]{%
\fboxsep=0pt%
\stackon{%
\colorbox{#1}{\strut\hspace{\theyearwidth}}%
}{\sffamily\tiny#2}%
\ignorespaces%
}
\begin{document}
\yearwidth{0.8pt}
\showyear{0}
\skipyears[gray]{0.8118cm}
\showyear{49}
\skipyears[blue]{1.8808cm}
\showyear{162}
\skipyears[gray]{0.382cm}
\showyear{}
\end{document}