我正在尝试使用 pgfplot 从 CSV 文件中绘制类似甘特图的图表。目的是显示任务调度程序的行为。在我的 CSV 文件中,我有时间戳 (x) 和任务 ID (y) 的元组。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{data.csv}
x,y
8868932,10
8868949,9
8868985,10
8868995,34
8869924,4
8869969,10
8869987,9
8870023,10
8870033,18
8870043,34
8870915,1
8870949,4
8871062,10
8871079,9
8871115,10
8871125,23
8871147,34
8871890,4
8871920,10
8871937,9
8871973,10
8871983,26
8872878,10
8872896,9
8872932,10
8872941,11
8872980,26
8873862,10
8873879,9
8873915,10
8873925,18
8873935,26
8874281,34
8874632,26
\end{filecontents}
\begin{document}
\begin{figure}
\begin{tikzpicture}[
font=\sffamily \footnotesize
]
\begin{axis}[
grid = major,
scaled ticks=false,
symbolic y coords={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34},
ytick={1,...,34},
height=12cm,
width=15cm,
x tick label style={rotate=90,anchor=east},
]
\addplot[
only marks,
mark=square,
scatter,
] table [x=x, y=y, col sep=comma] {data.csv};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
每个数据点都表明哪个任务处于活动状态。但是为了仅显示任务安排的时间点,我喜欢显示任务处于活动状态的时间段。因此,每个点的标记需要具有相对于下一个时间戳和此时间戳之差的宽度。是否有可能使用 pgfplot 做到这一点?或者您有其他想法来使用此给定数据显示类似甘特图的图表吗?
非常感谢
答案1
下面是使用jump mark left
绘图的一个选项(无线条的变体const plot
);一个问题是,一些宽度与数据相比太短,因此即使使用 30 厘米宽度的绘图,一些间隔也难以看清:
\documentclass[border=3pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepackage{filecontents}
\begin{filecontents}{data.csv}
x,y
8868932,10
8868949,9
8868985,10
8868995,34
8869924,4
8869969,10
8869987,9
8870023,10
8870033,18
8870043,34
8870915,1
8870949,4
8871062,10
8871079,9
8871115,10
8871125,23
8871147,34
8871890,4
8871920,10
8871937,9
8871973,10
8871983,26
8872878,10
8872896,9
8872932,10
8872941,11
8872980,26
8873862,10
8873879,9
8873915,10
8873925,18
8873935,26
8874281,34
8874632,26
\end{filecontents}
\begin{document}
\begin{tikzpicture}[
font=\sffamily \footnotesize
]
\begin{axis}[
grid = major,
scaled ticks=false,
thick,
ytick={1,...,34},
height=12cm,
width=30cm,
x tick label style={rotate=90,anchor=east},
]
\addplot+[jump mark left] table[col sep=comma]{data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
谢谢skevin93为了his answer
。