从 csv 绘制类似甘特图的图表

从 csv 绘制类似甘特图的图表

我正在尝试使用 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

相关内容