Wie zeichne ich mit pgfgantt Multiprozessor-Gantt-Diagramme?

Wie zeichne ich mit pgfgantt Multiprozessor-Gantt-Diagramme?

Ich habe eine kurze Frage zumAbonnierenPaket:

Für eine Arbeit muss ich in der Lage sein, Diagramme wie dieses zu zeichnen:

Bildbeschreibung hier eingeben

Mit den Anleitungen, pgfganttdie ich bisher gesehen habe, kann ich jedoch nicht herausfinden, wie das geht. Bisher habe ich nur so etwas hinbekommen:

Bildbeschreibung hier eingeben

Hier ist mein Code:

\begin{ganttchart}[
inline, % puts the label inside the bar
hgrid,
vgrid,
bar height=1
]{1}{10}
% P3
\ganttgroup[inline=false,group/.style={draw=none, fill=none}]{P3}{2,0}{25,0}
\ganttbar[bar/.append style={fill=green}]{$T1$}{1}{2} 
\ganttbar{}{3}{4} 
\ganttbar[bar/.append style={fill=orange}]{$T3$}{5}{7}
\ganttbar{}{8}{9} 
\ganttbar[bar/.append style={fill=cyan}]{$T5$}{10}{10} 
\\
% P2
\ganttgroup[inline=false,group/.style={draw=none, fill=none}]{P2}{2,0}{25,0}
\ganttbar[bar/.append style={fill=green}]{$T1$}{1}{2} 
\ganttbar{}{3}{4} 
\ganttbar{}{3}{4} 
\ganttbar{}{5}{7}
\ganttbar[bar/.append style={fill=yellow}]{$T4$}{8}{9}
\ganttbar[bar/.append style={fill=cyan}]{$T5$}{10}{10} 
\\
% P1
\ganttgroup[inline=false,group/.style={draw=none, fill=none}]{P1}{2,0}{25,0}
\ganttbar{}{1}{4} 
\ganttbar[bar/.append style={fill=orange}]{$T3$}{5}{7}
\ganttbar[bar/.append style={fill=yellow}]{$T4$}{8}{9}
\ganttbar{}{10}{10}
%
\end{ganttchart}

Daher meine Frage: Wie kann ich Tasks auf mehreren Prozessoren (P_x) verteilen und dabei den Eindruck erwecken, dass sie zusammengehören (schwarzen Rand entfernen, nur eine Notation etc.)?

Antwort1

Ich hoffe, Sie haben nichts dagegen, wenn ich eine Alternative anbiete. Wenn Sie bereits mit dem pgfplotsPaket vertraut sind, ist die Verwendung dieses Pakets anstelle von pgfganttmöglicherweise eine einfache Option, ohne zu viel am pgfganttCode herumbasteln zu müssen.

Dies ist ein Beispiel, das area plotin Abschnitt 4.5.10 des pgflotsHandbuchs beschrieben wird.

Die \addplotKoordinaten werden in dieser Reihenfolge angegeben:{(south west) (north west) (north east) (south east)}

Die allgemeinen Einstellungen für die axisUmgebung sind etwas gewachsen (was meiner Meinung nach bei normalerweise der Fall ist pgfplots). Wenn Sie Fragen zu bestimmten Einstellungen haben, beantworte ich diese gerne in den Kommentaren.

Ergebnis:

Neues Gantt

Code:

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{intersections}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
  font=\footnotesize,
  ytick style={draw=none},
  xtick style={draw=none},
  unit vector ratio*=1 1 1,
  axis lines = middle,
  enlarge x limits = {value=.1,upper},
  enlarge y limits = {value=.05,upper},
  ylabel={processors},
  xlabel={time},
  ylabel near ticks,
  xlabel near ticks,
  const plot,
  stack plots=false,
  area style,
  ytick={1,...,11},
  yticklabels={},  
  xtick={1,...,4},
  extra y ticks={3,5,6,8,10,11},
  extra y tick style={yticklabel={$P_{\pgfmathprintnumber{\tick}}$}}
  ] 
 \addplot[fill=yellow] coordinates {(0,0)  (0,3) (3,3)  (3,0) } node at (current path bounding box.center) {T4};
\addplot[fill=orange] coordinates {(0,3) (0,5) (2,5) (2,3)} node at (current path bounding box.center) {T3}; 
\addplot[fill=red!20] coordinates {(2,3) (2,5) (3,5) (3,3)} node at (current path bounding box.center) {T7}; 
\addplot[fill=gray] coordinates {(3,0) (3,8) (4,8) (4,0)} node at (current path bounding box.center) {T9};  
\addplot[fill=teal] coordinates {(0,5) (0,11) (1,11) (1,5)} node at (current path bounding box.center) {T5}; 
\addplot[fill=yellow!60!black] coordinates {(1,5) (3,5) (3,6) (1,6)} node at (current path bounding box.center) {T8};
\addplot[fill=red!20] coordinates {(2,6) (2,8) (3,8) (3,6)} node at (current path bounding box.center) {T7}; 
\addplot[fill=blue!20] coordinates {(1,6)  (1,10) (2,10) (2,6)} node at (current path bounding box.center) {T6};
\addplot[fill=magenta] coordinates {(2,8) (2,10) (4,10) (4,8)} node at (current path bounding box.center) {T2};
\addplot[fill=green!20] coordinates {(1,10) (1,11) (4,11) (4,10)} node at (current path bounding box.center) {T1};
\end{axis}
\end{tikzpicture}
\end{document}

verwandte Informationen